SQL select查询使MySQL服务器没有响应并且没有得到任何结果

SQL select查询使MySQL服务器没有响应并且没有得到任何结果,mysql,wordpress,Mysql,Wordpress,我在数据库中有两个来自目标网站的表,必须获得帖子缩略图行。一张桌子是,另一张是。标准Wordpress导出不包括特色图片,所以我打算自己获取。wp_posts包含所有post,而featured image也是post的一种,存储在此表中。wp_Posteta表包含与帖子id链接的不同元数据,_缩略图_id键的值是帖子类型“附件”的id。下面的问题将稍微澄清我想说的内容 Select * From wp_posts Where ID In (Select meta_value Fro

我在数据库中有两个来自目标网站的表,必须获得帖子缩略图行。一张桌子是,另一张是。标准Wordpress导出不包括特色图片,所以我打算自己获取。wp_posts包含所有post,而featured image也是post的一种,存储在此表中。wp_Posteta表包含与帖子id链接的不同元数据,_缩略图_id键的值是帖子类型“附件”的id。下面的问题将稍微澄清我想说的内容

Select * From wp_posts 
Where ID In (Select meta_value 
    From wp_postmeta 
    Where meta_key='_thumbnail_id' 
    And post_id In (Select ID From wp_posts 
        Where post_type='$post_type'));

wp_post包含约10k行,wp_Posteta包含约70k行。谢谢你的帮助。如果你们能告诉我如何将带有缩略图的特定帖子类型从一个wordpress安装迁移到另一个安装,那也太好了。

我认为
中嵌套的
子句可能是性能问题的根源。您需要一个中等复杂的查询,因为WordPress 1)将您的帖子存储为
wp\u posts
中的一行,其中包含您的
post\u类型
,2)缩略图“附件”作为
wp\u posts
中的另一行,以及3)wp\u postmeta
中的附件元数据。我确信这就是为什么在
s中使用嵌套的
,但在
s中使用
不是特别有效的原因

您的查询确实可以工作,但对于与您的数据库大小相同的数据库,您可能会耗尽内存或时间,或者两者兼而有之。在我的数据库上(它小得多),您的查询在0.0123秒内执行。以下查询与您的查询结果完全相同,只需0.0006秒即可执行

SELECT children.*
FROM wp_posts as children
JOIN wp_posts as parents on parents.ID = children.post_parent
WHERE children.ID IN (
    SELECT meta_value
    FROM wp_postmeta
    WHERE post_id = parents.ID
    AND meta_key='_thumbnail_id'
) 
AND parents.post_type='{$post_type}'
假设它从我的数据库返回4行,您可以看到这是多么巨大的执行差异

下面的查询并不比上面的查询慢多少(0.0013秒),但返回的行不是前一个查询返回的行(在我的例子中是一个额外的),并且仍然比您的查询快很多倍。我想这是你想要的问题

SELECT *
FROM wp_posts as children
JOIN wp_posts as parents on parents.ID = children.post_parent
JOIN wp_postmeta ON parents.ID = wp_postmeta.post_id
AND wp_postmeta.meta_key = '_thumbnail_id'
AND children.post_type = 'attachment'
AND parents.post_type = '{$post_type}'

我认为
子句中嵌套的
可能是性能问题的根源。您需要一个中等复杂的查询,因为WordPress 1)将您的帖子存储为
wp\u posts
中的一行,其中包含您的
post\u类型
,2)缩略图“附件”作为
wp\u posts
中的另一行,以及3)wp\u postmeta
中的附件元数据。我确信这就是为什么在s中使用嵌套的
,但在
s中使用
不是特别有效的原因

您的查询确实可以工作,但对于与您的数据库大小相同的数据库,您可能会耗尽内存或时间,或者两者兼而有之。在我的数据库上(它小得多),您的查询在0.0123秒内执行。以下查询与您的查询结果完全相同,只需0.0006秒即可执行

SELECT children.*
FROM wp_posts as children
JOIN wp_posts as parents on parents.ID = children.post_parent
WHERE children.ID IN (
    SELECT meta_value
    FROM wp_postmeta
    WHERE post_id = parents.ID
    AND meta_key='_thumbnail_id'
) 
AND parents.post_type='{$post_type}'
假设它从我的数据库返回4行,您可以看到这是多么巨大的执行差异

下面的查询并不比上面的查询慢多少(0.0013秒),但返回的行不是前一个查询返回的行(在我的例子中是一个额外的),并且仍然比您的查询快很多倍。我想这是你想要的问题

SELECT *
FROM wp_posts as children
JOIN wp_posts as parents on parents.ID = children.post_parent
JOIN wp_postmeta ON parents.ID = wp_postmeta.post_id
AND wp_postmeta.meta_key = '_thumbnail_id'
AND children.post_type = 'attachment'
AND parents.post_type = '{$post_type}'