応用情報技術者 2017年 春期 午前2 問28
問題文
“部品” 表のメーカコード列に対し、B+木インデックスを作成した。これによって、“部品”表の検索の性能改善が最も期待できる操作はどれか。ここで、部品及びメーカのデータ件数は十分に多く、“部品” 表に存在するメーカコード列の値の種類は十分な数があり、かつ、均一に分散しているものとする。また、“部品” 表のごく少数の行には、メーカコード列に NULLが設定されている。実線の下線は主キーを、破線の下線は外部キーを表す。
部品(部品コード、部品名、メーカコード)
メーカ(メーカコード、メーカ名、住所)
選択肢
ア:メーカコードの値が1001 以外の部品を検索する。
イ:メーカコードの値が1001 でも4001 でもない部品を検索する。
ウ:メーカコードの値が4001 以上、4003 以下の部品を検索する。(正解)
エ:メーカコードの値がNULL以外の部品を検索する。
B+木インデックスによる検索性能改善【午前2 解説】
要点まとめ
- 結論:B+木インデックスは範囲検索(例:4001以上4003以下)で最も効果を発揮します。
- 根拠:B+木はキーの順序を保持し、範囲内の連続したデータを効率的に読み出せるためです。
- 差がつくポイント:単一値の除外検索やNULL判定ではインデックスの恩恵が薄く、範囲検索での性能向上が顕著です。
正解の理由
選択肢ウ「メーカコードの値が4001以上、4003以下の部品を検索する」は、B+木インデックスの特性を最大限に活かせる範囲検索です。B+木は葉ノードが連結リスト状に繋がっており、指定範囲のキーを連続的に高速に取得可能です。これにより、該当範囲のデータを効率よく抽出でき、検索性能が大幅に改善します。
よくある誤解
NULL値の検索や特定の値を除外する検索は、インデックスの利用効率が低くなるため性能改善は限定的です。
解法ステップ
- B+木インデックスの特徴を理解する(順序付けられた木構造で範囲検索に強い)。
- 問題文の条件(メーカコードの値が均一に分散、多数のデータ)を確認。
- 各選択肢の検索条件がインデックスの特性に合うか検討。
- 範囲検索である選択肢ウが最も効率的であると判断。
選択肢別の誤答解説
- ア: 「1001以外の部品を検索」は除外条件であり、インデックスの範囲走査ができず効率が悪い。
- イ: 「1001でも4001でもない部品を検索」も除外条件で、インデックスの連続走査ができない。
- ウ: 「4001以上4003以下の部品を検索」は範囲検索であり、B+木の連続走査が活かせるため正解。
- エ: 「NULL以外の部品を検索」はNULLはインデックスに含まれないことが多く、全件走査に近くなるため効率が悪い。
補足コラム
B+木インデックスはリーフノードが連結リストで繋がっているため、範囲検索や順序付き検索に強みがあります。一方、NULL値は多くのDBMSでインデックスに登録されないため、NULL判定の検索ではインデックスが使われにくい点に注意が必要です。
FAQ
Q: B+木インデックスはなぜ範囲検索に強いのですか?
A: 葉ノードが連結リストで繋がっており、範囲内のキーを連続して高速に読み出せるためです。
A: 葉ノードが連結リストで繋がっており、範囲内のキーを連続して高速に読み出せるためです。
Q: NULL値はインデックスに含まれますか?
A: 多くのDBMSではNULLはインデックスに登録されないため、NULL検索ではインデックスが利用されにくいです。
A: 多くのDBMSではNULLはインデックスに登録されないため、NULL検索ではインデックスが利用されにくいです。
関連キーワード: B+木インデックス、範囲検索、NULL値、検索性能、データベースインデックス

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

