ちょうど業務で大量のデータが入っているMySQLのパフォーマンスチューニングをやる機会があったので、備忘録として残しておこう。経験則なので、間違っている部分があるかもしれない。
- MySQLは1テーブルにつき1つのインデックスを使用するのでWHERE条件とORDER BY条件が異なる場合はいずれか一つが使われる(実行計画のKeyとPossible keyをみるとわかる)
- 複合インデックスの対象カラムはWHERE条件、ORDER BY条件の順に定義する
- カーディナリティの高いカラムを複合インデックスに含めるのが良いが、WHERE条件、ORDER
BY条件にあるカラムすべてを含めずともそれなりに性能は向上する - 複合インデックスはカラムが定義された順に検索されるので、1番目のカラムにはもっとも使用頻度の高いカラムを設定する
検索・一覧表示画面は一般的にWHERE条件とORDER BY条件が複雑に組み合わさっているので、複合インデックス前提で設計するのが良いと思った。
ここに答えがあった。さすが日本男児だ。
http://nippondanji.blogspot.com/2008/12/2008.html