Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Wordpress慢速查询wp_帖子与wp_Posteta内部连接_Mysql_Sql_Wordpress_Performance - Fatal编程技术网

Mysql Wordpress慢速查询wp_帖子与wp_Posteta内部连接

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

我的主页上有这个查询,速度很慢,需要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 = '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;