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

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

