2017-05-09 109 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将其转换为这。