DBデータベーススペシャリスト試験 午後Ⅰ
平成25年度春期 データベーススペシャリスト 午後Ⅰ 問3
事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。
問題







解き方のヒントを見る
統計情報と取得結果を整理する視点
統計や検索結果を考えるときは、まず設問が尋ねている対象を一つに定め、情報の性質と取得方法を混同せずに、観測した結果が何を表すのかを確認しましょう。そのうえで、条件や前提が変わった場合に解釈が変わらないかを見直します。
この問題で問われていること
今回の確認点は、提示された情報が「性能を見積もる材料」なのか「実際に返された結果」なのかを区別し、設問の要求と同じ対象を見ているかを丁寧に確かめることです。用語だけで判断せず、文脈上の役割に注目します。
視点
情報源・評価対象・取得結果という三つの観点を頭の中で分け、各記述がどの対象について述べているかを対応づけます。個々の用語を暗記した印象だけで結論を出さず、設問が求める確認対象との関係を順に整理することが大切です。
確認ポイント
- 設問が確認を求めている対象を一つに絞る
- 記述中の対象と観察対象が一致しているか確認する
- 前提条件が変わると解釈も変わるか見直す
正解と解説を見る
解説
RDBMSの統計情報を基に、結果行数の推定、複合キーによるページング、統計情報と保守処理がアクセス経路へ与える影響を問う問題です。
問題の全体像
E社の注文システムでは、RDBMSが統計情報と索引定義を基にSQLのアクセス経路を決める。設問1では表の行数・列値の個数から結果行数を見積もり、設問2では複合キーの順序を保った次ページ取得を考える。設問3では、仮注文表の削除後に統計情報が実態と合わなくなり、SQL6が索引探索から表探索へ変わる問題と、保守処理の順序を問う。
設問1(1)(a)
商品分類表では、C1番号の異なる値が100個、C2番号の異なる値が500個あり、カテゴリ1とカテゴリ2を合わせた行数になる。したがって、行数aは100+500=600です。
設問1(1)(b)
親カテゴリ番号はカテゴリ2が所属するカテゴリ1の番号であり、カテゴリ1自身の行ではNULLになる。したがって、異なる親カテゴリ番号の個数はカテゴリ1の種類数と同じ100です。
設問1(2)(c)
注文表の行数2、700、000を、顧客番号の異なる値300、000個で均等に分ける。顧客番号を条件にしたSQL2の推定結果行数は2、700、000÷300、000=9です。
設問1(2)(d)
注文明細表の行数27、000、000を、注文番号の異なる値2、700、000個で均等に分ける。注文番号を条件にしたSQL3の結果行数は27、000、000÷2、700、000=10です。
設問1(2)(e)
SQL4は注文年月日で注文表を絞り、注文番号で注文明細表と結合する。注文表の90日分の各日には2、700、000÷90=30、000件の注文があり、1注文当たり10明細なので、結果行数は300、000です。
設問1(3)
注文明細表の行数27、000、000を注文数2、700、000で割ると、1注文当たりの平均明細行数は10になる。ただし表2の明細番号の列値の個数は48であり、1注文内で取り得る最大明細番号が48までであるため、最大明細行数は48行となる。
設問2(1)(ア)
1画面目の10行目はC2番号AA1、商品番号00051です。SQL5は商品番号だけを00051より大きい条件にするため、次のC2グループであるAA2の商品も対象になる。ORDER BYの順序に従うと、2行目の商品番号は00055です。
設問2(1)(イ)
SQL5の結果は、C2番号AA1で商品番号00051より大きい行に続き、C2番号AA2の商品番号00055以降が並ぶ。したがって3行目の商品番号は00072となる。
設問2(2)(ウ)
1画面目の最後の行と同じC2番号AA1に属する商品については、商品番号が00051より大きい行だけを取得する。したがって述語はC2番号='AA1'です。
設問2(2)(エ)
同じC2番号AA1の中で、1画面目の最後の商品番号00051より後の行を取得する条件なので、商品番号>'00051'となる。
設問2(2)(オ)
1画面目の最後のC2番号より後のカテゴリの商品は、商品番号に関係なく取得する必要がある。したがって条件はC2番号>'AA1'となる。これにより、同じカテゴリ内の続きと後続カテゴリを分けて取得できる。
設問3(1)
対象はSQL6です。仮注文表の全行を削除した直後に統計更新を行うと、統計情報上の行数がゼロになる。オプティマイザは行数ゼロの場合に表探索を最適と仮定するため、索引探索から表探索へ変わる。40字以内では、SQL6、仮注文表の統計情報の行数がゼロになることを押さえる。
設問3(2)
SQL6は注文確定時に仮注文表から行を1行ずつ取得する。表探索では実行のたびに表の先頭から行を読むため、仮注文表に行が蓄積するほど読み込む行数が増え、実行回数ごとの処理時間が長くなる。
設問3(3)
公式解答例では、C・A・B、またはA・Bが示されている。統計更新を行う場合は、削除前にCを実施して実データに基づく統計を作り、その後Aで不要行を削除し、Bで再編成する。削除後に統計更新を行うと、仮注文表の行数ゼロという統計になり、SQL6が表探索を選ぶ問題につながるためです。既存の表2相当の統計情報を利用できる場合は、Cを省いてA・Bとする。
学習のポイント
統計情報の計算、複合索引の先頭列、表の保守順序を重点的に学習する。
出典:独立行政法人 情報処理推進機構(IPA)平成25年度春期 データベーススペシャリスト試験 午後Ⅰ 問3(公式資料:問題冊子(PDF) / 解答例 / 採点講評)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針