複合インデックス
add_indexメソッドが生成するインデックス名が作られる手順
"index_"、テーブル名、”_on_"を連結する
単独のインデックスがあればカラム名を追加する
複合インデックスであれば、すべてのカラム名を"_and_"で連結して追加する
インデックス名の長さには制限(PostgreSQLでは63バイト)があるので注意が必要になる。
複合インデックスの組み合わせについて
X、Y、Zの3つのカラムに対して複合インデックスを設定する場合は以下のように複合インデックスが活用される。
カラムX単独の検索
カラムXとYを組み合わせた検索
カラムX、Y、Zを組み合わせた検索
しかし、以下の組み合わせはこの複合インデックスは利用されない。
カラムY単独の検索
カラムZ単独の検索
カラムYとZを組み合わせた検索
※カラムXとZの組み合わせた検索はカラムXに基づいてレコードを絞り込むところまではこの複合インデックスが利用される。
そこから更にカラムZに基づいてレコードを絞り込む処理には利用されない。
すべての組み合わせによる検索を最適化するには以下の3 つのインデックスを追加する必要がある。
カラムYとZ に対する複合インデックス
カラムXとZに対する複合インデックス
カラムZに対するインデックス
検索項目の数が増えてくると組み合わせの数が膨大になり、すべての組み合わせに対してインデックスを設定するのは現実的ではない。
適宜省略して複合インデックスを設定するようにする。