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