2011-11-18 120 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。 –