データベース索引とは

索引の概念を整理。

基本的には本の索引と一緒。
500ページある本から特定の言葉を探すとき、索引があれば索引のページを見て直接ページに飛ぶだけ。
即ち2回ページを開くだけでいける。
特定の言葉が複数のページにある場合だと、索引ページに180ページから200ページの間というふうに指定してる。
この場合180ページから200ページの間は1ページずつ探すことになるが、
これでも索引使わず前から順番に見ていくより早いYOってこと。
けど、特定の言葉が全ページにあったら索引に1〜500とか書いてる。
これじゃ、索引使わず前から見るのと一緒、むしろ索引のページ見た分一回余計にページ見ないといけないYOってこと。*1

索引を張るべきカラムは?

上で説明したように、WHERE句で指定したときにより少ない値に特定できるカラムに張るべき。
即ち、カーディナリティ(値の種類)が多い列に索引を張れば効果的。
では、カーディナリティが少ない列には索引を張っても全く意味がないかといえばそうではない。
以下のような場合には効果がある。

  • 男女比率が9:1の会社の「性別」カラム
  • 「処理/未処理フラグ」を表すカラム(ほとんどが処理となっている状態が多いカラム)

Oracleのより詳しい動きが知りたいなら↓これ。

Oracleはこう動いている。―Oracle徹底検証

Oracleはこう動いている。―Oracle徹底検証

*1:ディスクのランダムアクセスが起こるので本当は影響はもっとでかい