WordPress文章数量10万以上时文章编辑器卡死的解决方案

这个问题来自对post_meta表的一个慢查询:

SELECT DISTINCT meta_key 
FROM wp_postmeta 
WHERE meta_key NOT BETWEEN '_'
AND '_z' 
HAVING meta_key NOT LIKE '\\_%' 
ORDER BY meta_key 
LIMIT 30

该查询由WordPress文章编辑器的Meta Box功能发起。

该问题的原因是MySql中普通索引的长度最长为767字节,如果使用的是utf8mb4编码的话,那么总的字符长度就是767/4,约为191,而WordPress的post_meta表的meta_key列的字符长度则是255。

所以此时因为meta_key的长度超范围,索引并未生效。解决方案可以选择把数据库编码更改为utf8或是将meta_key的长度更改为191,再或者是禁用掉Meta Box功能。

当然,提醒一句,这些更改都可能会破坏兼容性,所以更改前请务必做好测试工作。

最后,导致性能问题的原因千奇百怪,具体情况要具体分析再针对性解决。so,本文所述方案不一定对你有用,但可提供一个思考的方向。

Leave a Reply

Your email address will not be published. Required fields are marked *

Captcha Code