• ベストアンサー

高速化のためのインデックスの張り方

テーブルtbl(c1,c2,c3)に対して、 select c1, c2, count(distinct c3) from tbl where group by c1,c2; というクエリの高速化をしたいのですが、どのようなインデックスを張れば良いでしょうか。(あるいは、もっと良いクエリの書き方はありますか?)

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

c1,c2をキーにc3を集計するならやはり ALTER TABLE tbl ADD INDEX (c1,c2,c3) しとかないとパフォーマンスがでないかもしれませんね。

その他の回答 (1)

回答No.1

はじめまして、通りすがると申します。 さて、どのようなインデックスを張ればいいかともうしますと、上記掲載内容だけでは解りません。 調査する方法として、EXPLAINというコマンドがあります。 これは、指定sqlでどのような計画が練られて、どの命令でどれぐらいのコストがかかるかを、 調査してくれます。  記述方法は、 EXPLAIN select c1, c2, count(distinct c3) from tbl where group by c1,c2 こんな感じです。  この実行結果を参考にどのキーを追加すればよいか、解ると思います。  補足   EXPLAN にはパラメータとしてANALYZE がありますが、これは発行したSQLを実際に実行して  しまうので、それなりの対処が必要です。(トランザクション制御してROLLBACK)

関連するQ&A