令和7年度 秋期 午前 問27
データベース
ハッシュインデックスに関する問題
"売上" 表への次の検索処理のうち,B⁺木インデックスよりもハッシュインデックスを設定した方が適切なものはどれか。ここで,インデックスを設定する列を〈〉内に示す。
〔表〕
売上(伝票番号,売上年月日,商品名,利用者 ID,店舗番号,売上金額)
- ア売上金額が 1 万円以上の売上を検索する。〈売上金額〉
- イ売上年月日が今月の売上を検索する。〈売上年月日〉
- ウ商品名が 'DB' で始まる売上を検索する。〈商品名〉
- エ利用者 ID が '1001' の売上を検索する。〈利用者 ID〉
答えと解説を見る
✓ これが正解エ利用者 ID が '1001' の売上を検索する。〈利用者 ID〉
解説
等号一択の検索ならハッシュインデックスが速いです。
この設問は、同じ表に対して四通りの検索条件を並べ、B⁺木ではなく、値をバケットへ射す索引の方が有利な条件はどれかを選ばせています。ですから、選び方の軸は、それぞれの検索条件が、値が特定の1つに一致することだけを問うているか、範囲や前方一致のように順序に沿った絞り込みを要するかという一点で見分けます。値をバケットへ射す索引は、値を関数で変換してどのバケットに入るかを一発で決めます。したがって、値そのものが一致する検索は最短で当てられますが、隣り合う値どうしがバラバラのバケットへ散らばるため、範囲や前方一致には向きません。順に並ぶ形の索引は、葉が値の順で連結されているので、範囲や前方一致に強く、逆に一致だけを問う場面では余分な段が乗ります。この物差しで四通りの条件を並べると、値が特定の1つと等しいことだけを問う条件が、値をバケットへ射す索引の得意分野に当たります。
ほかの選択肢はなぜ違うのか
- ア売上金額が 1 万円以上の売上を検索する…:指定した金額以上という条件で、値の大小を含む範囲での絞り込みを求めています。範囲は葉が順に並ぶ索引に任せるのが向いており、値をバケットへ射す方式では隣接する値どうしが別のバケットへ散らばるため、連続した範囲を絞る手段が用意されていません。
- イ売上年月日が今月の売上を検索する。〈売上…:指定した期間内の日付という条件で、これも範囲での絞り込みを求めています。日付を順に並べた索引であれば範囲の左端から右へたどるだけで済みますが、値を関数で射す方式では日付の連続性が失われるため、範囲を効率よく詰めていく道が残りません。
- ウ商品名が 'DB' で始まる売上を検索す…:指定した文字列で始まるという前方一致の条件で、実際には所定の文字列以上、次の文字列未満という範囲の問い方に置き換えられます。順に並ぶ索引が力を発揮する場面で、値を関数で射す方式では前方一致に整合する順序が崩れているので出番がありません。
この問題の用語
- ハッシュハッシュ関数で作られた値そのもの。元に戻せないので、中身を見せずに同じかどうかだけを確かめるのに使えます。
出典:令和7年度 秋期 応用情報技術者試験 午前 問27
同じ用語が出る問題
- 令和6年度 秋期 午前 問46:エクスプロイトコードの説明(ハッシュ)
- 令和5年度 秋期 午前 問26:ハッシュインデックスに関する問題(ハッシュ)
- 令和5年度 春期 午前 問41:TPMに関する問題(ハッシュ)
- 令和2年度 10月 午前 問44:TPMに関する問題(ハッシュ)
- 平成30年度 秋期 午前 問8(ハッシュ)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)