Mysql 有没有办法改进这个查询?将子查询与自身连接

Mysql 有没有办法改进这个查询?将子查询与自身连接,mysql,wordpress,join,subquery,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_rela

我正在使用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_PosteTa表中获取followers_计数。所以我们有4个连接表

我想用followers_count得到该帖子在指定国家的排名,这是最后一个子查询

它现在可以工作了,但我觉得它可以改进,因为我选择了所有帖子及其相应的国家和关注者,然后再次查询相同的表,从我选择的帖子中获取国家和关注者数量(本例中为80),所以我将第一次查询限制为仅该国家

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


有没有一种方法可以改进这一点,或者将查询缩小一点,而不仅仅是性能,我想了解更多。

如果您刚刚学习完,那么我将开始将所有子选择转换为联接。查看“explain extended”的输出,看看优化器对这个查询做了什么,然后将其作为一系列连接重复。通常情况下,如果不使用子选择,它会更快更容易处理

若干参考资料:



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