平成29年度 春期 午前 問28
データベース
インデックスに関する問題
“部品”表のメーカコード列に対し,B+木インデックスを作成した。これによって,“部品”表の検索の性能改善が最も期待できる操作はどれか。ここで,部品及びメーカのデータ件数は十分に多く,“部品”表に存在するメーカコード列の値の種類は十分な数があり,かつ,均一に分散しているものとする。また,“部品”表のごく少数の行には,メーカコード列に NULL が設定されている。実線の下線は主キーを,破線の下線は外部キーを表す。
〔表:関係スキーマ〕
| 表 | 列(下線の種類) |
|---|---|
| 部品 | 部品コード(実線=主キー),部品名,メーカコード(破線=外部キー) |
| メーカ | メーカコード(実線=主キー),メーカ名,住所 |
- アメーカコードの値が 1001 以外の部品を検索する。
- イメーカコードの値が 1001 でも 4001 でもない部品を検索する。
- ウメーカコードの値が 4001 以上,4003 以下の部品を検索する。
- エメーカコードの値が NULL 以外の部品を検索する。
答えと解説を見る
✓ これが正解ウメーカコードの値が 4001 以上,4003 以下の部品を検索する。
解説
値が順に並ぶので、狭い範囲の検索に効きます。
設問は、メーカコード列に B+木インデックスを作ったとき、検索の性能改善が最も期待できる操作を選ばせています。判断の軸は二つです。一つ目は構造です。B+木は末端にキーの値が小さい順に並び、末端どうしが横につながっています。ある値まで木をたどって降り、そこから横に読み進めれば連続した範囲をまとめて取り出せるので、等しい値を指定する検索と範囲を指定する検索に強くなります。二つ目は取り出す割合です。インデックスが効くのは表のごく一部を返すときで、大部分を返す検索では索引をたどってから表へ戻る往復のほうが高くつき、順に全件を読んだほうが速くなります。設問は、値の種類が十分多く均一に分散していると断っています。したがって 4001 以上 4003 以下という三種類ぶんは全体のごく一部にとどまり、しかも連続した範囲なので末端を横に読むだけで済みます。二つの軸を同時に満たすのはこの操作だけです。
ほかの選択肢はなぜ違うのか
- アメーカコードの値が 1001 以外の部品…:値が 1001 でないものを取り出す操作です。一種類を除いた残り全部が返るため、行の大半が対象になり、索引を経由する往復がかえって重くなります。
- イメーカコードの値が 1001 でも 40…:値が 1001 でも 4001 でもないものを取り出す操作です。除くのが二種類に増えても返る量はやはり表の大半で、否定の形は並び順をたどって絞り込む役に立ちません。
- エメーカコードの値が NULL 以外の部品…:メーカコードが NULL でない行を取り出す操作です。NULL の行はごく少数だと設問が断っているので返るのはほぼ全件ですし、空の値は製品によっては索引に載りません。
この問題の用語
- 改善悪いところを直して、より良い状態にすること。一度で終わらせず、計画・実行・評価・見直しを繰り返して続けるのが基本です。
出典:平成29年度 春期 応用情報技術者試験 午前 問28
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)