平成23年度 秋期 午前 問32
データベース
インデックスに関する問題
“部品”表のメーカコード列に対し,B+木インデックスを作成した。これによって,検索の性能改善が最も期待できる操作はどれか。ここで,部品及びメーカのデータ件数は十分に多く,メーカコードの値は均一に分散されているものとする。また,ごく少数の行には,メーカコード列に NULL が設定されている。
- アメーカコードの値が 1001 以外の部品を検索する。
- イメーカコードの値が 1001 でも 4001 でもない部品を検索する。
- ウメーカコードの値が 4001 以上,4003 以下の部品を検索する。
- エメーカコードの値が NULL 以外の部品を検索する。
答えと解説を見る
✓ これが正解ウメーカコードの値が 4001 以上,4003 以下の部品を検索する。
解説
強く絞り込める範囲の指定で効きます。
インデックスは、条件に合う行が全体のごく一部に限られるときに効きます。逆に、ほとんどの行が戻ってくるような条件では、索引をたどってから表の行を引きにいくという往復が行数のぶん積み上がり、素直に全部を順に読むほうがかえって速くなります。ですから判断の順序は、まずどれくらいの行が戻るかを見積もることです。設問が、データの件数は十分に多く、値は均一に分散していると断っているのは、この見積もりをさせるためです。値の種類がいくつかあって均一に散っているなら、ある一つの値に当たる行は全体のごく一部で、それを除いた残りはほとんど全体になります。もう一つ、この索引の形も見ておきます。B+木は値を並んだ順に葉へ置き、葉どうしが横につながっている造りです。端を一度引き当てれば、あとは横にたどるだけで、ある幅に収まる値をまとめて取り出せます。つまり、上と下の境目を示す指定と相性がよいわけです。四つの操作を見比べる軸は二つになります。戻る行数が少ないかどうか、そしてこの並びをたどる形に乗るかどうかです。なお、値が入っていない行は索引に載らない造りが多く、NULL を手掛かりにした絞り込みは効果を期待しにくい点も押さえておくとよいでしょう。
ほかの選択肢はなぜ違うのか
- アメーカコードの値が 1001 以外の部品…:ある一つの値を除いた残りすべてを取り出す指定です。値が均一に散っているという前提のもとでは、戻るのはほとんど全体になるので、索引をたどって引きにいく意味が薄くなります。
- イメーカコードの値が 1001 でも 40…:二つの値を除いた残りを取り出す指定です。除かれる分が一つ増えるだけで、戻るのはやはりほとんど全体ですから、素直に全部を順に読む場合との差はつきません。
- エメーカコードの値が NULL 以外の部品…:値が入っていない行を除く指定ですが、設問はそれがごく少数だと断っています。除いた残りはほとんど全体になり、そのうえ値の無い行は索引に載らない造りが多いという事情も重なります。
この問題の用語
- 改善悪いところを直して、より良い状態にすること。一度で終わらせず、計画・実行・評価・見直しを繰り返して続けるのが基本です。
出典:平成23年度 秋期 応用情報技術者試験 午前 問32
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)