【发布时间】:2019-12-06 13:40:07
【问题描述】:
我的主页中有这个查询,非常慢,需要 4 秒才能执行。我的 wp_posts 表有 125672 行,我的 wp_postmeta 有 1405416 行。 此外,将 wp_posts 与 wp_postmeta 内部连接的所有其他查询都非常慢。
SELECT wp_posts.ID
FROM wp_posts
INNER JOIN wp_postmeta
ON ( wp_posts.ID = wp_postmeta.post_id )
WHERE 1=1
AND ( ( wp_postmeta.meta_key = 'home'
AND wp_postmeta.meta_value = '1' ) )
AND wp_posts.post_type IN ('post', 'training', 'video', 'startup')
AND ((wp_posts.post_status = 'publish'))
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0, 1
【问题讨论】:
-
wp_postmeta.post_id 上应该有一个索引 - 你能检查一下它还在那里吗?您是否尝试过通常的 MySQL 慢查询调试,例如EXPLAIN 查询? wp_posts 部分应该完全来自 type_status_date 索引,因此如果不是,则会出现问题。我知道这无关紧要,但你也可以尝试删除
1=1,以防万一这令人不安? -
如果您想要 DISTINCT 结果,请使用 DISTINCT,而不是 GROUP BY。是的,GROUP BY 更快,但这不是它的用途,在更复杂的情况下,你就像 a) 犯了一个错误,b) 没有意识到它。
标签: mysql sql wordpress performance