B+木インデックスによる範囲検索の性能改善

B+木インデックスはキー順にソートされてリーフノードがポインタチェーンで結ばれているため、「等値検索(=)」や「範囲検索(BETWEEN、>=、<=)」において極めて高い検索性能を発揮します。選択肢ウの「4001以上4003以下」は狭い範囲検索であり、B+木の探索木を1回辿って開始キーを見つけた後、リーフノードのシーケンシャルスキャンで高速に対象行を取得できるため、全表走査と比較して劇的な性能改善が期待できます。 否定条件(<> 1001)は、テーブルの大部分の行が合致するため、インデックスを使用しても性能改善にならず、全表走査(Full Table Scan)の方が効率的となります。 否定のAND条件も同様に大部分の行が対象となるため、B+木インデックスの恩恵をほとんど得られません。 NULL以外の検索(IS NOT NULL)は、ごく少数の行のみがNULLという前提条件から、テーブルのほぼ全行(99%以上)が該当するため、インデックススキャンは非効率であり全表走査が選ばれます。

“部品”表のメーカーコード列に対し,B+木インデックスを作成した。これによって,“部品”表の検索の性能改善が最も期待できる操作はどれか。ここで,部品及びメーカーのデータ件数は十分に多く,“部品”表に存在するメーカーコード列の値の種類は十分な数があり,かつ,均一に分散しているものとする。また,“部品”表のごく少数の行には,メーカーコード列に NULL が設定されている。実線の下線は主キーを,破線の下線は外部キーを表す。

q13-figure-1
出典令和5年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問13
ア
メーカーコードの値が 1001 以外の部品を検索する。
イ
メーカーコードの値が 1001 でも 4001 でもない部品を検索する。
ウ
メーカーコードの値が 4001 以上,4003 以下の部品を検索する。
エ
メーカーコードの値が NULL 以外の部品を検索する。