Lược đồ chuẩn cho wp_postmeta
cung cấp các chỉ số kém. Điều này dẫn đến các vấn đề về hiệu suất.
Bằng cách thay đổi lược đồ thành này, hầu hết các tham chiếu đến dữ liệu meta sẽ nhanh hơn:
CREATE TABLE wp_postmeta (
post_id …,
meta_key …,
meta_value …,
PRIMARY KEY(post_id, meta_key),
INDEX(meta_key)
) ENGINE=InnoDB;
Ghi chú:
-
AUTO_INCREMENT
hiện tại rất tốn dung lượng và làm chậm các truy vấn vì nó làPRIMARY KEY
, do đó tránh PK "tự nhiên" "tổng hợp" của(post_id, meta_key)
. - InnoDB tăng cường hơn nữa hiệu suất của PK đó do "phân cụm". (Tôi hy vọng bạn vẫn không sử dụng MyISAM!)
- Nếu bạn đang sử dụng MySQL 5.6 (Hoặc MariaDB 10.0 hoặc 10.1), hãy thay đổi
meta_key
từVARCHAR(255)
, không phảiVARCHAR(191)
. (Chúng ta có thể thảo luận về lý do và cách giải quyết, trong một câu hỏi riêng, nếu 191 là không đủ.) -
INDEX(meta_key)
là tùy chọn, nhưng cần thiết nếu bạn muốn "tìm các bài đăng có một khóa cụ thể". - Lưu ý:Những thay đổi này sẽ tăng tốc nhiều sử dụng postmeta, nhưng không phải tất cả. Tôi không nghĩ nó sẽ làm chậm bất kỳ trường hợp sử dụng nào. (Vui lòng cung cấp các truy vấn như vậy nếu bạn gặp phải. Đó có thể là vấn đề về bộ nhớ đệm, không phải do suy thoái thực sự.)
Nếu bạn muốn giới thiệu của bạn CREATE TABLE
, Tôi có thể cung cấp ALTER
để chuyển đổi nó thành cái này.
Nếu bạn cần khả năng có nhiều khóa meta có cùng tên khóa cho một bài đăng, thì hãy sử dụng giải pháp này. Nó gần tốt như gợi ý ở trên.
meta_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, -- keep after all
...
PRIMARY KEY(post_id, meta_key, meta_id), -- to allow dup meta_key for a post
ALTER có thể xảy ra
Lưu ý:
- Tôi không có cách nào để kiểm tra điều này.
- Điều này không giải quyết được lỗi 767
- Điều này giữ
meta_id
bởi vì một số người dùng WP đã chỉ ra rằng nó được các bảng khác tham chiếu. - Nó giả định rằng bạn có thể có nhiều hàng cho một tổ hợp (post_id, meta_key). (Đây có vẻ là thiết kế giản đồ kém?)
- Tất cả những việc này là tăng tốc các
SELECTs
điển hình liên quan đến postmeta. - Điều này cũng có thể áp dụng cho thương mại điện tử.
- Nếu bạn sử dụng điều này, vui lòng kết xuất cơ sở dữ liệu của bạn và sẵn sàng tải lại trong trường hợp có sự cố.
SQL:
ALTER TABLE wp_postmeta
DROP PRIMARY KEY,
DROP INDEX post_id,
ADD PRIMARY KEY(post_id, meta_key, meta_id), -- to allow dup meta_key for a post
ADD INDEX(meta_id); -- to keep AUTO_INCREMENT happy