令和5年度 秋期 午前Ⅱ 問13
トランザクション処理
インデックスに関する問題
“部品”表のメーカーコード列に対し,B^+木インデックスを作成した。これによって,“部品”表の検索の性能改善が最も期待できる操作はどれか。ここで,部品及びメーカーのデータ件数は十分に多く,“部品”表に存在するメーカーコード列の値の種類は十分な数があり,かつ,均一に分散しているものとする。また,“部品”表のごく少数の行には,メーカーコード列にNULLが設定されている。実線の下線は主キーを,破線の下線は外部キーを表す。
部品(部品コード,部品名,メーカーコード〔破線の下線〕)
メーカー(メーカーコード,メーカー名,住所)
- アメーカーコードの値が1001以外の部品を検索する。
- イメーカーコードの値が1001でも4001でもない部品を検索する。
- ウメーカーコードの値が4001以上,4003以下の部品を検索する。
- エメーカーコードの値がNULL以外の部品を検索する。
答えと解説を見る
✓ これが正解ウメーカーコードの値が4001以上,4003以下の部品を検索する。
解説
値の範囲を指定する検索で、B+木インデックスの効果が最も出ます。
B+木インデックスは、キーの値の順に葉ノードが並び、葉同士がつながっているので、ある値を起点にして範囲の端までを順にたどる検索が得意です。この問では、メーカーコードの値の種類が十分に多く、均一に分散しているので、4001以上4003以下という条件に合う行は全体のごく一部です。インデックスで4001の位置を見つけ、4003まで葉をたどるだけで対象の行にたどり着けるので、全件を読む場合に比べて大きく性能が改善します。見分ける軸は、条件に合う行が全体のどれくらいの割合かです。ごく一部だけを取り出す条件ほどインデックスが効き、ほとんどの行が当てはまる条件では効かないと覚えておきましょう。
ほかの選択肢はなぜ違うのか
- アメーカーコードの値が1001以外の部品を…:1001以外という条件には、値の種類が十分多いので、ほとんど全部の行が当てはまります。インデックスを使っても結局ほぼ全件を読むことになり、全件を順に調べる場合より速くなることは期待できません。
- イメーカーコードの値が1001でも4001…:1001でも4001でもないという条件も、二つの値を除いたほぼ全部の行が対象になります。取り出す行が全体の大部分を占めるので、インデックスを使った検索の効果はほとんど得られません。
- エメーカーコードの値がNULL以外の部品を…:NULL が設定されているのはごく少数の行だけなので、NULL 以外という条件にはほぼ全部の行が当てはまります。対象が全体のほとんどになるため、インデックスによる性能改善は期待できません。
この問題の用語
- 改善悪いところを直して、より良い状態にすること。一度で終わらせず、計画・実行・評価・見直しを繰り返して続けるのが基本です。
出典:令和5年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問13
同じ用語が出る問題
- 令和6年度 秋期 午前Ⅱ 問25:テスト駆動開発に関する問題(改善)
- 令和6年度 秋期 午前Ⅱ 問22:RAID5と比較した記述(改善)
- 平成30年度 春期 午前Ⅱ 問25:テスト駆動開発に関する問題(改善)
- 平成22年度 春期 午前Ⅱ 問23:性能比を表す式(改善)
- 平成21年度 春期 午前Ⅱ 問21:この応答時間を最も短縮させる対策(改善)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)