B+木インデックスとハッシュインデックスの特性比較

ハッシュインデックスは,キー値をハッシュ関数によってハッシュ値に変換し,対応するバケットを直接参照することで $O(1)$ の極めて高速な検索を実現します。 ただし,ハッシュ値にはキー値の大小順序が保存されないため,範囲検索(不等号比較)や前方一致検索・ソート処理には利用できず,「等価比較(=)」による完全一致検索でのみ真価を発揮します。 一方,$B^+$木インデックスはキー値がソートされた木構造を維持するため,等価比較に加えて範囲検索(以上・以下・BETWEEN)や前方一致検索(LIKE 'DB%')にも効率的に対応できます。 選択肢エの「利用者 ID が '1001' の売上を検索する」は完全一致(等価比較)検索であるため,ハッシュインデックスの特性に最も適しています。したがって正解はエとなります。 各選択肢の解説は以下のとおりです。 「1万円以上」という範囲検索(不等号比較)であり,ソート順序を保持する $B^+$木インデックスが適しています。 「今月」という期間の範囲検索(BETWEEN や不等号比較)であり,$B^+$木インデックスが適しています。 「'DB' で始まる」という前方一致検索(LIKE 'DB%')であり,順序関係を利用できる $B^+$木インデックスが適しています。

“売上”表への次の検索処理のうち,B+B^+木インデックスよりもハッシュインデックスを設定した方が適切なものはどれか。ここで,インデックスを設定する列を〈 〉内に示す。

売上(伝票番号,売上年月日,商品名,利用者 ID,店舗番号,売上金額)

出典令和5年度 秋期 応用情報技術者試験 午前 問26
ア
売上金額が 1 万円以上の売上を検索する。〈売上金額〉
イ
売上年月日が今月の売上を検索する。〈売上年月日〉
ウ
商品名が ‘DB’ で始まる売上を検索する。〈商品名〉
エ
利用者 ID が ‘1001’ の売上を検索する。〈利用者 ID〉