データベースの基礎
100万行の会員表で、会員番号(すべて異なる)、都道府県(47種類)、性別(2種類でほぼ半々)の列に、それぞれB+木のインデックスを作ることを考える。WHERE句で1つの列の値を指定して検索するとき、インデックスの効果が最も小さいと考えられる列はどれか。
- A都道府県
- B性別
- C会員番号
答えと解説を見る
正解:B. 性別
インデックスが効果を発揮するのは、条件に合う行が全体のごく一部に絞り込まれる場合です。会員番号はすべて異なるので、条件に合うのは1行だけで、インデックスで直接たどり着けます。都道府県は47種類なので、均等に分かれていれば、1つの値で約 100万 ÷ 47 ≒ 2万1千行(全体の約2%)に絞られます。性別は2種類でほぼ半々なので、どちらの値を指定しても約50万行(約50%)が該当します。これほど多くの行を、インデックスを経由して1行ずつ取り出すと、表を最初から順に読む全件走査より遅くなることが多いので、DBMSのオプティマイザはインデックスを使わない実行方法を選ぶことがあります。このように、値の種類が多く、条件で行を絞り込める度合い(選択性)が高い列ほど、インデックスの効果は大きくなります。
- A. 都道府県は47種類あり、1つの値で全体の約2%に絞り込めるので、性別よりは効果があります。
- B. 正しい。どちらの値でも約半分の行が該当するので、インデックスの効果がほとんどありません。
- C. 会員番号はすべて異なり、1行に絞り込めるので、インデックスの効果が最も大きい列です。