DBテーブルインデックスチューニング
DBテーブルを構築する際、インデックスを設定しておくのはシステム屋さんの定石である。
まともにDB組んだことなかったので、このインデックスを設定することの意義をあまり理解していなかったから、ここにまとめてみる。
インデックスとは何か
インデックスとは日本語で「索引」を意味する。私たちの周りに存在する索引はたとえば辞書である。
漢字字典には、部首索引、画数索引などがある。これらは数百ページに及ぶ辞書の中から目的の項目をすぐに探せるようにしている。
DBに置き換えてみる。使用頻度や一度に登録されるデータ件数から、DBのテーブルには数千行、数万行、数十万行のレコードが作成されることが予想されるとき、DBはインデックスが設定されていないと生真面目に全部の行を取得して、検索をかけてしまう。
これはいくらコンピュータといえど結構な時間がかかる。
だからDBを設計する者がインデックスを設定して、優先的に検索をかける項目を決めておく。
たとえば名簿を人が検索する場合、50音順に区分しておくと検索しやすくなる。あるいは、住所を都道府県、市町村に区分する。
これと同様にDBのデータもインデックスを設定して、検索の高速化ができる。
設定の仕方
本題のそのインデックスの設定しかただが、そのシステムがテーブルに対しどんな条件で検索することが多いのかによる。
たとば、都道府県を条件にしたり、名簿のIDを条件にしたり、作成日を条件にしたりすることが多い場合はそれぞれにインデックスを設定する。
また、ほかのフィールドと複合的にインデックスをつけることができる。
たとえば、名前と住所で検索することが多い場合、名前と住所で1つのインデックスとして設定することができる。
まとめ
インデックスは検索の多いフィールドに設定し、そのテーブルがどのように使われるかを考えながら構築する必要がある。