#RDBにおけるインデックスとは
インデックスを制する者はDBを制すぐらい重要な存在らしいです。
実生活で例えるなら、書籍などの巻末にある索引と同じような働きです。
それをDB上で行ってくれるのでテーブルに大量のデータが格納されていても検索を高速化できるのです。
#不適切なインデックスではデメリットも
便利なインデックスですが、インデックスもデータなので無駄が存在すると逆に処理が遅くなることもあるみたいです。
次のような箇所にはインデックスを作成するのは控えたほうが良さそうです。
・そもそも検索が行われないカラム
・格納されるデータが少数であるテーブル
・頻繁に更新が行われるテーブル
#RDBにおけるインデックスの種類と特徴
いくつか種類があり、要件によって使い分ける必要があります。
■B+ツリーインデックス
これが一番ポピュラーなインデックスで、テーブルのデータとは別にデータ(インデックスの値)が格納されたリーフノードと、リーフノードへの経路を示すノンリーフノードが形成されます。
ノンリーフノードにはリーフノードが保有している最小値が格納されます。
階層が増えても1つの経路を検索すればいいので効率的です。
■ハッシュインデックス
範囲検索(100〜200までの値を検索したい等)は出来ないが等価比較(123という値を検索したい等)による検索は非常に早いのが特徴です。
■全文検索インデックス
行に含まれる単語や文字列で構成されたインデックス、英字には強いが日本語に弱いです。
■Rツリーインデックス
最小外接矩形という図形を用いた概念で構成されます。
■関数インデックス
関数を適用したクエリでインデックスを使いたい場合に有効です。
■ビットマップインデックス
カラムをビットで判定していてインデックスのスキャンは高速になるが、更新処理だと時間がかかるようです。
#最適なインデックス設計をするには
1.検索が行われない、データ少、更新多のケースでのインデックス作成は控える
2.インデックスが利用可能であるSQL構文を把握して、その構文に合ったインデックス作成を選定する
3.全体的なバランスを頭に入れてインデックスの組み合わせを考える
4.やり過ぎない
#参考文献
技術評論社 「理論から学ぶデータベース実践入門」