【发布时间】:2014-06-16 17:18:07
【问题描述】:
我不是 sql 专家。 我的 wordpress 开始返回超时并且响应非常慢。 当我开始挖掘时,我注意到 slow_query 日志有很多要告诉我的。 不幸的是,我有很多缓慢的查询。 例如:
# Time: 140425 17:03:29
# User@Host: geektime[geektime] @ localhost []
# Query_time: 7.024031 Lock_time: 0.000432 Rows_sent: 0 Rows_examined: 0
SET timestamp=1398434609;
SELECT wp_posts.*
FROM wp_posts
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
LEFT JOIN wp_postmeta AS order1 ON order1.post_id = wp_posts.ID
AND order1.meta_key = '_event_start_date'
LEFT JOIN wp_postmeta AS order2 ON order2.post_id = wp_posts.ID
AND order2.meta_key = '_event_start_time'
WHERE 1=1
AND wp_posts.post_type = 'event'
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'future'
OR wp_posts.post_status = 'draft'
OR wp_posts.post_status = 'pending')
AND ((wp_postmeta.meta_key = '_event_start_date'
AND CAST(wp_postmeta.meta_value AS CHAR) BETWEEN '2014-04-11' AND '2014-04-17')
OR (mt1.meta_key = '_event_end_date'
AND CAST(mt1.meta_value AS CHAR) BETWEEN '2014-04-11' AND '2014-04-17'))
GROUP BY wp_posts.ID
ORDER BY order1.meta_value,
order2.meta_value ASC;
列 post_id、meta_id 和 meta_key 在 wp_postmeta 表中被索引。 列 ID、post_name、post_type、post_status、post_date、post_parent、post_author 和 guid 在 wp_posts 表中建立索引。
但是,列 ID 和 GUID 被索引了两次,是不是很糟糕?
并且有4个索引具有相同的key_name:type_status_date,是不是很糟糕?
为什么我在 wp_posts 中有 60K 行,而在 wp_postmeta 中有 3M 行?
我知道有很多问题要问,但我真的试图通过在线研究来理解。
提前致谢。
【问题讨论】:
-
这个 WordPress 安装是否围绕一些专门的应用程序(如事件调度)?你里面有什么插件?
-
不幸的是,我们使用了很多插件。但是对于上面的查询,您可能是对的,它可能与插件事件管理器有关。
-
列的单独索引并不总是有用的。请参阅 this 以获取更好的索引
wp_metadata的方法。
标签: mysql sql wordpress indexing