2017-05-09 110 views

回答

2

的標準架構進行wp_postmeta爲貧困指標。這導致性能問題。

通過改變架構來此,以元數據大多數引用會更快:

CREATE TABLE wp_postmeta (
    post_id …, 
    meta_key …, 
    meta_value …, 
    PRIMARY KEY(post_id, meta_key), 
    INDEX(meta_key) 
) ENGINE=InnoDB; 

注:

  • 目前AUTO_INCREMENT列是浪費空間,並減慢查詢,因爲它是PRIMARY KEY,因此避開了(post_id, meta_key)的「自然」「複合」PK。
  • 由於「聚類」,InnoDB進一步提升了該PK的性能。 (我希望你還沒有使用MyISAM!)
  • 如果您使用的是MySQL 5.6(或MariaDB 10.0或10.1),請從VARCHAR(255)更改meta_key,而不是VARCHAR(191)。 (如果191不夠,我們可以在單獨的問題中討論原因和解決方法。)
  • INDEX(meta_key)是可選的,但如果您想「查找具有特定鍵的帖子」,則需要。
  • 警告:這些更改會加速許多使用postmeta,但不是全部。我不想認爲它會減緩任何用例。 (如果你遇到他們,請您提供這樣的質疑。這可能是一個緩存的問題,而不是AR真正降解。)

如果你想提出CREATE TABLE,我可以提供一個ALTER將其轉換爲這。