“部品”表のメーカコード列に対し,B+木インデックスを作成した。
これによって,“部品”表の検索の性能改善が最も期待できる操作はどれか。
ここで,部品及びメーカのデータ件数は十分に多く,“部品”表に存在するメーカコード列の値の種類は十分な数があり,かつ,均一に分散しているものとする。
また,“部品”表のごく少数の行には,メーカコード列にNULLが設定されている。
実線の下線は主キーを,破線の下線は外部キーを表す。
部品(部品コード(主キー),部品名,メーカコード(外部キー))
メーカ(メーカコード(主キー),メーカ名,住所)
正答3
解説
正解は3です。
B+木インデックスは、キーの値の順に並んだ木構造の索引で、葉のノードどうしが順番につながっています。
特定の値や範囲を指定して、少数の行を絞り込む検索で効果を発揮します。
逆に、該当する行が表の大部分を占める検索では、索引を使っても表全体を読むのと変わらず、効果はほとんどありません。
【選択肢別解説】
1:× 「1001以外」という否定条件では、ほぼすべての行が該当します。
索引で絞り込めないので、表全体を読む全件検索と変わりません。
2:× 「1001でも4001でもない」という否定条件も、ほぼすべての行が該当します。
索引による絞り込みの効果はほとんど期待できません。
3:○ 4001以上4003以下という範囲の検索では、木をたどって4001の位置を見つけ、葉のノードを順に読んで4003まで取り出せます。
値の種類が多く均一に分散しているので、該当する行は少なく、索引の効果が最も大きくなります。
4:× NULLが設定されているのはごく少数の行なので、「NULL以外」はほぼすべての行が該当します。
索引で絞り込む効果はほとんどありません。
【ポイント】
B+木インデックスは、等号による検索と範囲検索に強い索引です。
該当行が多くなる否定条件の検索には向かないことを押さえておきましょう。