平成27年度 春期 午前 問29
データベース
B+木インデックスに関する問題
“部品”表のメーカコード列に対し,B+木インデックスを作成した。これによって,“部品”表の検索の性能改善が最も期待できる操作はどれか。ここで,部品及びメーカのデータ件数は十分に多く,メーカコードの値は均一に分散されているものとする。また,“部品”表のごく少数の行には,メーカコード列に NULL が設定されている。ここで,実線の下線は主キーを,破線の下線は外部キーを表す。
〔関係スキーマ〕
部品(部品コード(主キー), 部品名, メーカコード(外部キー))
メーカ(メーカコード(主キー), メーカ名, 住所)
※原典は主キーを実線の下線,外部キーを破線の下線で示す。書き起こしでは(主キー)(外部キー)と文字で添えた。
- アメーカコードの値が 1001 以外の部品を検索する。
- イメーカコードの値が 1001 でも 4001 でもない部品を検索する。
- ウメーカコードの値が 4001 以上,4003 以下の部品を検索する。
- エメーカコードの値が NULL 以外の部品を検索する。
答えと解説を見る
✓ これが正解ウメーカコードの値が 4001 以上,4003 以下の部品を検索する。
解説
並びを使える範囲の検索で、読む行が少なく済みます。
設問は、部品の表のメーカコードの列にB+木インデックスを作ったとき、最も性能改善が期待できる操作を選ばせています。B+木は値を小さい順に葉へ並べ、葉どうしを横につないで持ちます。端の一か所を木でたどり着ければ、あとは横に進むだけで続きが取れますから、得意なのは等しい値を探す検索と、範囲を切り取る検索です。もう一つ効き目を左右するのは、その条件で返る行が全体のどれくらいを占めるかという点です。索引は返る行が少ないときにこそ得で、多くの行が返るなら索引を経由するぶんだけ手数が増えます。よって、メーカコードの値が4001以上4003以下の部品を検索する操作が当てはまります。値は均一に分散しているという断りがありますから、この範囲に入るのは三種類ぶんにすぎず、木で端に降りて横にたどれば終わります。設問の断り書きは飾りではなく、一つずつどの記述を落とすために置かれているかを見ます。
ほかの選択肢はなぜ違うのか
- アメーカコードの値が 1001 以外の部品…:特定の値を除くという条件です。値は均一に分散しているので、除かれるのはごく一部にすぎず、返るのは残りのほとんど全部になります。索引をたどるよりも、表をそのまま順になめたほうが速くなります。
- イメーカコードの値が 1001 でも 40…:除く値が二つに増えただけで、形は変わりません。それでも返るのは全体の大半ですから、読む量が減らず、索引を作ったことによる改善はほとんど見込めないままです。
- エメーカコードの値が NULL 以外の部品…:設問は、値の入っていない行がごく少数であると断っています。よってこの条件に当てはまるのはほぼ全行となり、全件を読むのと変わりません。加えて、値の無い行を索引に載せない実装も多くあります。
この問題の用語
- 改善悪いところを直して、より良い状態にすること。一度で終わらせず、計画・実行・評価・見直しを繰り返して続けるのが基本です。
出典:平成27年度 春期 応用情報技術者試験 午前 問29
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)