2011-11-18 121 views
3

我有一个多对多的查询,我想优化, 我应该为它创建什么样的索引?sql多对多查询索引优化

SELECT (SELECT COUNT(post_id) 
      FROM posts 
      WHERE post_status = 1) as total, 
     p.*, 
     GROUP_CONCAT(t.tag_name) tagged 
    FROM tags_relation tr 
    JOIN posts p ON p.post_id = tr.rel_post_id 
    JOIN tags t ON t.tag_id = tr.rel_tag_id 
    WHERE p.post_status=1 
GROUP BY p.post_id 

EXPLAIN

id select_type table type possible_keys key key_len ref rows Extra 
1 PRIMARY  p ALL PRIMARY NULL NULL NULL  5 Using where; Using filesort 

回答

3

您可以使用Explain声明看一看查询执行计划。这将向您显示是否发生全表扫描,或者是否能够找到检索数据的索引。从这一点上,你可以进一步优化。

编辑

根据您的查询执行计划,第一优化步骤检查你的表有定义的主键,你可以设置post_status和TAG_NAME列的索引。

+0

+1:相当多的反复试验,它取决于数据和它是如何访问... –

+0

这里是结果 PRIMARY,post_status \t post_status 常量使用其中;使用filesort – dsportesa

+0

现在,您的查询将post_status作为关键字,而不像之前的执行计划为NULL。 –