【问题标题】:SQL select query made MySQL server not responding and got no resultSQL 选择查询使 MySQL 服务器没有响应并且没有结果
【发布时间】:2012-12-22 20:48:55
【问题描述】:

我在数据库中有两个来自目标网站的表,并且必须获取发布缩略图行。一张桌子是wp_posts,另一张桌子是wp_postmeta。标准 Wordpress 导出不包括特色图片,所以我打算自己获取。 wp_posts 包含所有帖子,特色图片也是一种帖子并存储在此表中。 wp_postmeta 表包含与post id 链接的不同元数据,_thumbnail_id 键的值是post 类型'attachment' 的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_postmeta 包含大约 70k 行。谢谢大家的帮助。如果你们告诉我如何将带有缩略图的特定帖子类型从一个 wordpress 安装迁移到另一个安装,那也太好了。

【问题讨论】:

    标签: mysql wordpress


    【解决方案1】:

    我认为嵌套的IN 子句可能是您的性能问题的根源。您需要一个适度复杂的查询,因为 WordPress 1) 存储您的帖子,其中包含您的 post_type 作为 wp_posts 中的一行,2) 缩略图“附件”作为 wp_posts 中的另一行,以及 3) 附件元数据在wp_postmeta。我相信这就是为什么你使用嵌套的INs 但INs 并不是特别有效的原因。

    您的查询确实有效,但是对于您的数据库大小,您可能会耗尽内存或时间,或两者兼而有之。在我的数据库上,它要小得多,您的查询在 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}'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 2018-04-02
      相关资源
      最近更新 更多