令和5年度 秋期 データベーススペシャリスト試験 午前II 問13

テクノロジデータベース

この問題は2023(R5)秋 データベーススペシャリスト 午前IIに出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

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

リレーションスキーマ
図の説明テキスト

リレーションスキーマの定義。
部品(部品コード(実線下線), 部品名, メーカーコード(破線下線))
メーカー(メーカーコード(実線下線), メーカー名, 住所)

解答・解説を読む

正解: 選択肢

B+\text{B}^+木インデックスは、データをキーの値でソートされた木構造で管理するインデックス方式です。
このデータ構造の特性上、特定のキー値との等価検索(=や、値の範囲検索(<, >, BETWEENなど)において、検索対象のデータを絞り込むための処理を非常に高速に行うことができます。

一方で、以下のような検索条件では、インデックスを有効に活用できず、表の全件検索(フルスキャン)が行われる可能性が高いため、性能改善はあまり期待できません。

  • 否定検索(「〜以外」「〜でない」など)
  • データの大半を読み込む必要がある検索

本設問では、メーカーコード列の値の種類は十分に多く、かつ均等に分散しているとされています。

各選択肢の解説

  • ア:メーカーコードの値が1001以外の部品を検索する。
    特定の値を指定する否定検索です。大半のデータが該当することになるため、インデックスを利用するメリットが少なく、全件検索が行われる可能性が高いため不適切です。

  • イ:メーカーコードの値が1001でも4001でもない部品を検索する。
    複数の値を指定する否定検索です。アと同様に、大半のデータが検索対象となるため、性能改善は期待できません。

  • ウ:メーカーコードの値が4001以上,4003以下の部品を検索する。
    条件指定が「以上」「以下」による範囲検索となっています。B+\text{B}^+木インデックスはソートされたデータ構造を持つため、範囲検索において対象データを効率よく絞り込むことができ、最も性能改善が期待できます。したがって、これが正解です。

  • エ:メーカーコードの値がNULL以外の部品を検索する。
    問題文に「ごく少数行には、メーカーコード列にNULLが設定されている」とあります。「NULL以外」を検索するということは、表に存在する「ごく少数以外のほとんどのデータ」を取得することになります。データの大半を取得する場合は全件検索の方が高速になることが多く、インデックスによる性能改善は期待できません。