- ベストアンサー
高速化のためのインデックスの張り方
テーブルtbl(c1,c2,c3)に対して、 select c1, c2, count(distinct c3) from tbl where group by c1,c2; というクエリの高速化をしたいのですが、どのようなインデックスを張れば良いでしょうか。(あるいは、もっと良いクエリの書き方はありますか?)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
c1,c2をキーにc3を集計するならやはり ALTER TABLE tbl ADD INDEX (c1,c2,c3) しとかないとパフォーマンスがでないかもしれませんね。
その他の回答 (1)
- ToOrisugaru
- ベストアンサー率28% (80/280)
回答No.1
はじめまして、通りすがると申します。 さて、どのようなインデックスを張ればいいかともうしますと、上記掲載内容だけでは解りません。 調査する方法として、EXPLAINというコマンドがあります。 これは、指定sqlでどのような計画が練られて、どの命令でどれぐらいのコストがかかるかを、 調査してくれます。 記述方法は、 EXPLAIN select c1, c2, count(distinct c3) from tbl where group by c1,c2 こんな感じです。 この実行結果を参考にどのキーを追加すればよいか、解ると思います。 補足 EXPLAN にはパラメータとしてANALYZE がありますが、これは発行したSQLを実際に実行して しまうので、それなりの対処が必要です。(トランザクション制御してROLLBACK)