2011-11-18 10 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

を説明します。これは、フル・テーブル・スキャンが起きているのか、それともデータを検索するための索引を見つけられたのかを示します。その時点からさらに最適化することができます。

編集

あなたのクエリ実行プランに基づいて、第1の最適化ステップは、あなたのテーブルをチェック定義された主キーを持っていて、post_statusとTAG_NAME列にインデックスを設定することができます。

+0

1:かなり多くの試行錯誤、そして、それがアクセスしていますどのようにデータに依存&...ここ –

+0

は結果 PRIMARY、使用post_status \t post_status \t 1つの\t constのです。 filesortの使用 – dsportesa

+0

これまでの実行計画とは異なり、クエリにはpost_statusがキーとして含まれていました。 –