平成27年度春期 応用情報技術者試験 午前 問29
“部品”表のメーカコード列に対し,B⁺木インデックスを作成した。これによって,“部品”表の検索の性能改善が最も期待できる操作はどれか。ここで,部品及びメーカのデータ件数は十分に多く,メーカコードの値は均一に分散されているものとする。また,“部品”表のごく少数の行には,メーカコード列にNULLが設定されている。ここで,実線の下線は主キーを,破線の下線は外部キーを表す。部品(部品コード,部品名,メーカコード)メーカ(メーカコード,メーカ名,住所)
- ア メーカコードの値が1001以外の部品を検索する。
- イ メーカコードの値が1001でも4001でもない部品を検索する。
- ウ メーカコードの値が4001以上,4003以下の部品を検索する。
- エ メーカコードの値がNULL以外の部品を検索する。
解答・解説を見る
正解:ウ
AI解説
B⁺木インデックスは、キー値を整列した木構造で保持し、葉ノードが順序どおりにリンクされているため、一致検索に加えて範囲検索(以上・以下、BETWEEN)に強い。「4001以上4003以下」という範囲条件のウが最も性能改善を期待できる。一方、否定条件は該当行が大部分を占めるためインデックスの効果がない。 ア: 「1001以外」という否定条件は表のほぼ全行が該当するため、インデックス経由のアクセスよりも全表走査の方が効率的で、改善は期待できない。 イ: 「1001でも4001でもない」も同様に大多数の行が該当する否定条件であり、インデックスは有効に働かない。 ウ: 正解。範囲条件はB⁺木の得意分野で、該当範囲の先頭を木構造で特定した後、リンクされた葉を順にたどるだけで少数の該当行を効率よく取り出せる。 エ: NULLの行はごく少数なので「NULL以外」はほぼ全行が該当し、全表走査と変わらない。 💡 B⁺木は「=」と範囲検索に強く、否定条件・ヒット率が高い条件には効かない。ハッシュインデックスは「=」専用で範囲検索に使えない、という対比も頻出である。
※Web掲載用に表記を一部変更しています。著作権はIPAに帰属します。