【问题标题】:How can I optimize this query and make it execute faster? [closed]如何优化此查询并使其执行得更快? [关闭]
【发布时间】:2013-01-05 07:11:19
【问题描述】:

如何通过此查询获得更快的结果?

SELECT
    post_id
FROM
    wp_postmeta
WHERE
    meta_key='wpcf-cooler-name' AND (
        post_id IN (
            SELECT 
                post_id
            FROM
                wp_postmeta
            WHERE
                meta_key='wpcf-cooler-name' AND
                meta_value LIKE '%sosa%' AND (
                    post_id IN (
                        SELECT
                            object_id AS 'post_id'
                        FROM
                            wp_term_relationships
                        WHERE 
                            term_taxonomy_id=227
                    )
                ) AND (
                    post_id IN (
                        SELECT
                            ID AS 'post_id'
                        FROM
                            wp_posts
                        WHERE 
                            post_type='cooler' AND
                            post_status='publish'
                    )
                )
        )
    ) ORDER BY meta_value ASC

我的数据库有超过 15000 个条目。因此,显示结果需要时间。

【问题讨论】:

  • 你不能使用 JOIN 代替子查询吗?另外,确保所有相关字段都已编入索引,例如 meta_keypost_idterm_taxonomy_id...
  • 您需要向我们展示表和索引定义。 诊断慢查询需要完整的表和索引定义,而不仅仅是描述或解释。也许您的表格定义不佳。也许索引没有正确创建。也许您认为您在该列上没有索引。没有看到表和索引定义,我们无法分辨。
  • 这看起来很像一堆 WordPress 表和列名?

标签: mysql sql select query-optimization


【解决方案1】:

使用WHERE 条件:

SELECT
  post.id
FROM
  wp_posts as post, wp_postmeta as postmeta, wp_term_relationships as relationships
WHERE
  postmeta.meta_key='wpcf-cooler-name'
  AND postmeta.meta_value LIKE '%sosa%'
  AND relationships.object_id = post.post_id
  AND relationships.term_taxonomy_id = 227
  AND post.ID = postmeta.post_id
  AND post.post_type = 'cooler'
  AND post.post_status='publish'
ORDER BY postmeta.meta_value ASC

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT wp.post_id 
    FROM wp_postmeta wp 
    INNER JOIN (SELECT object_id AS 'post_id' 
                FROM wp_term_relationships 
                WHERE term_taxonomy_id = 227 
            UNION  
                SELECT ID AS 'post_id' 
                FROM wp_posts 
                WHERE post_type = 'cooler' AND post_status = 'publish') A ON wp.post_id = A.post_id
    WHERE wp.meta_key = 'wpcf-cooler-name' AND wp.meta_value LIKE '%sosa%' 
    ORDER BY wp.meta_value;
    

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 1970-01-01
      • 2011-05-07
      • 2022-09-30
      • 1970-01-01
      • 2011-09-25
      • 2016-02-27
      • 2013-10-07
      • 2013-09-19
      相关资源
      最近更新 更多