Mysql Wordpress慢速查询wp_帖子与wp_Posteta内部连接
我的主页上有这个查询,速度很慢,需要4秒才能执行。我的wp_posts表有125672行,我的wp_posteta表有1405416行。 另外,将wp_帖子与wp_postemta连接在一起的每一个其他查询都非常慢Mysql Wordpress慢速查询wp_帖子与wp_Posteta内部连接,mysql,sql,wordpress,performance,Mysql,Sql,Wordpress,Performance,我的主页上有这个查询,速度很慢,需要4秒才能执行。我的wp_posts表有125672行,我的wp_posteta表有1405416行。 另外,将wp_帖子与wp_postemta连接在一起的每一个其他查询都非常慢 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 = 'h
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
您可以尝试使用exists重写此文件: 这将通过或选择DISTINCT除去外部组 然后,您需要索引。我建议: wp_postspost_状态、post_类型、id、post_日期 wp_postmetapost_id、元键、元值 编辑: 另一种优化方法是从wp_Posteta开始: 为此,您需要在wp_postmetameta_键、meta_值、post_id和postsid上建立索引。如果id是主键,则后者默认存在
如果子查询中的筛选条件具有很高的选择性,这将很好地工作。您可以尝试使用exists重写此项: 这将通过或选择DISTINCT除去外部组 然后,您需要索引。我建议: wp_postspost_状态、post_类型、id、post_日期 wp_postmetapost_id、元键、元值 编辑: 另一种优化方法是从wp_Posteta开始: 为此,您需要在wp_postmetameta_键、meta_值、post_id和postsid上建立索引。如果id是主键,则后者默认存在 如果子查询中的过滤条件是高度选择性的,那么这将很好地工作 你需要这个吗 按wp_posts.ID分组 在post_状态中,post_类型可能会有所帮助 请参阅我对post_meta索引的建议: 你需要这个吗 按wp_posts.ID分组 在post_状态中,post_类型可能会有所帮助 请参阅我对post_meta索引的建议:
应该有一个关于wp_posteta.post_id的索引-你能检查一下它还在吗?您是否尝试过常见的MySQL慢速查询调试,例如查询?wp_posts部分应该完全来自type_status_date索引,因此如果不是,就会出现问题。我知道这不要紧,但是你能试着把1=1也去掉吗,以防万一那会让事情变得不好?如果你想要不同的结果,请使用不同的,而不是分组。是的,分组更快,但这不是它的目的,在更复杂的场景中,你就像a犯了错误,b没有意识到。wp_posteta.post_id上应该有一个索引-你能检查一下它是否还在吗?您是否尝试过常见的MySQL慢速查询调试,例如查询?wp_posts部分应该完全来自type_status_date索引,因此如果不是,就会出现问题。我知道这不要紧,但是你能试着把1=1也去掉吗,以防万一那会让事情变得不好?如果你想要不同的结果,请使用不同的,而不是分组。是的,GROUP BY更快,但这不是它的目的,在更复杂的场景中,你就像a犯了错误,b没有意识到。实际上,你的替代查询运行时与我现有的查询有一个片段差异,差异是0.13秒,这不是很明显。此外,添加索引并没有提高运行时间。如果meta_值是LONGTEXT,则无法对其进行索引。实际上,您的替代查询运行时与我的现有查询存在一个片段差异,差异为0.13s,这不是很明显。此外,添加索引并没有提高运行时间。如果meta_值是LONGTEXT,则无法对其进行索引。
SELECT wp_posts.ID
FROM wp_posts p
WHERE EXISTS (SELECT 1
FROM wp_postmeta pm
WHERE p.ID = pm.post_id AND
pm.meta_key = 'home' AND
pm.meta_value = '1'
) AND
p.post_type IN ('post', 'training', 'video', 'startup') AND
p.post_status = 'publish'
ORDER BY p.post_date DESC
LIMIT 0, 1;
SELECT p.id
FROM (SELECT pm.*
FROM wp_postmeta pm
WHERE p.ID = pm.post_id AND
pm.meta_key = 'home' AND
pm.meta_value = '1'
) pm JOIN
wp_posts p
ON p.ID = pm.post_id
WHERE p.post_type IN ('post', 'training', 'video', 'startup') AND
p.post_status = 'publish'
ORDER BY p.post_date DESC
LIMIT 1;