電子書籍の厳選無料作品が豊富!

MySQLの複合インデックスに関して質問させて頂きます。

現在検索条件に3つのカラムを使用して検索をかけているSELECT文があります。
データの件数は100万件ほどあるとします。

【例】
「SELECT * FROM test WHERE a = '1' AND b = 'xxxxx' AND c = '1';」

カラム「a」「c」は、0と1のみが格納されたカラムで、頻繁に更新されます。
カラム「b」は、同じ値が入ることがありますが、ほぼユニークな文字列が格納されます。

上記のような場合、インデックスは
・「a,b,c」の全てを設定した複合インデックスを作成するべきか。
・cは頻繁に更新されるので、「a,b」のみの複合インデックスを作成するべきか。
・aも同じく頻繁に更新されるので、WHERE句の検索順をbを先に持ってきて、「b」のみの単独インデックスを作成するべきか。


一概にこうだという答えは無いかもしれませんが、何か良い方法があれば教えて頂けると幸いです。
また、質問に不備な点がございましたら、ご指摘お願いいたします。

A 回答 (1件)

同じtestテーブルで管理しているなら複合インデックスで十分では?


explainで検証しながらやってみるしかないでしょう

bが「ほぼユニーク」であるならbで先行して
絞り込みをしてサブクエリをつかって処理する手もないことはないかと。
できれば「ほぼユニーク」をなんらかの形で「ユニーク」に絞り込む
方法を考えた方がいいかもしれませんね
    • good
    • 0
この回答へのお礼

今回はbを先行して単一インデックスを設定することで対応しました。
回答頂きありがとうございます。

お礼日時:2014/04/18 10:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!