有没有办法改善这个查询?加入子查询本身

时间:2012-12-27 11:59:56

标签: mysql wordpress join subquery

我正在使用Wordpress和MySQL,我有以下查询

SELECT COUNT(p.ID)
FROM wp_posts AS p
    LEFT JOIN wp_postmeta AS t1
       ON t1.post_id = p.ID
         AND t1.meta_key = 'followers_count' 
    LEFT JOIN
       (SELECT tt.term_id,tr.object_id
        FROM wp_term_relationships AS tr
          INNER JOIN wp_term_taxonomy AS tt
             ON tt.term_taxonomy_id = tr.term_taxonomy_id
               AND tt.taxonomy='paises'
       ) as terms
         ON p.ID=terms.object_id 
    INNER JOIN
        (SELECT meta_value,tt.term_id
         FROM wp_postmeta AS t1 
          LEFT OUTER JOIN wp_term_relationships AS tr
             ON t1.post_id=tr.object_id
          INNER JOIN wp_term_taxonomy AS tt
             ON tt.term_taxonomy_id = tr.term_taxonomy_id
               AND tt.taxonomy='paises'
         WHERE t1.post_id = 80
            AND t1.meta_key = 'followers_count'
       ) AS f
          ON p.post_type='post'
             AND p.post_status='publish'
             AND t1.meta_value>f.meta_value
             AND terms.term_id=f.term_id

基本上我在这里做的是从术语表中获取post country,从wp_postmeta表中获取followers_count。所以我们有4个连接表。

我想使用followers_count获取指定国家/地区中该帖子的排名,这是最后一个子查询。

它现在有效,但我觉得它可以改进,因为我选择所有帖子与他们相应的国家和粉丝,然后我再次查询相同的表格,从我选择的帖子中获取国家和粉丝数量(在这种情况下为80)所以我将第一个查询限制为仅该国家。

我尝试过临时表,但我不能在同一个查询中多次使用它,并且MySQL中不存在CTE,所以我这样做了。

有没有办法改进这个或缩小查询一点,而不是我希望学习更多的性能。

1 个答案:

答案 0 :(得分:0)

如果您刚刚学习,那么我首先将所有子选项转换为连接。看一下'explain extended'的输出,看看优化器对这个查询的作用 - 然后重复它作为一系列连接。如果不使用子选择,通常会更快更容易处理。

几个参考文献:

Here
Here
and Here

注意 - 这不是100%规则 - 您的里程可能会有所不同。