基本情報技術者 2015年 春期 午前(科目A) 問30
問題文
図は、DBMSが受け付けたクエリを実行するまでの処理の流れを表している。①〜③に入る処理の組合せとして、適切なものはどれか。


選択肢
ア:
イ:
ウ:
エ:(正解)
🔒 解説は解答すると表示されます
SQLクエリの実行処理フロー【午前解説】
正解の理由
正解は エ です。DBMSの一般的なクエリ処理順序は (1) 構文解析(パース)でSQLを解析してパース木/論理計画を作成、(2) 最適化で論理計画を変換・コスト評価して最適な物理計画を決定、(3) コード生成で物理計画を低レベルな実行オペレータ列や実行計画(実際のスキャン/結合アルゴリズム等)に変換し、最後に実行します。選択肢エがこの正しい順序「構文解析→最適化→コード生成」を示しているため正解です。
解法ステップ
- 各処理(構文解析・最適化・コード生成)が何をするかを頭の中で短く定義する。
- どの処理が前提情報を必要とするかを考える(例:最適化はパース木や統計が必要)。
- その前提関係から処理の順番を決める(解析→最適化→生成)。
- 選択肢を順に照合して前提に反するものを排除する。
選択肢別の誤答解説
- ア(コード生成 → 構文解析 → 最適化):コード生成が解析より先に来るのは矛盾します。解析結果がないと生成できません。
- イ(コード生成 → 最適化 → 構文解析):構文解析が最後では成立しません。SQLの解析なしに最適化や生成は不可能です。
- ウ(構文解析 → コード生成 → 最適化):コード生成後に最適化する順序は非現実的で、最適化は生成前に計画を改善する必要があります。
- エ(構文解析 → 最適化 → コード生成):正解。解析で得た論理表現を最適化し、その結果に基づいてコード(実行計画)を生成します。
よくある誤解
- 構文解析と最適化を混同して、構文チェックだけで最適化が完了すると考える誤り:最適化は統計情報やコスト評価が必要です。
- 「コード生成=実行」と捉え、最適化の前にコード生成してよいと思う誤り:コード生成は最適化結果(物理計画)に基づいて行われます。
- コンパイラの知識をそのまま当てはめ、DB固有の「物理最適化(インデックス選択、結合方式)」を見落とす誤り。
補足コラム
- 構文解析は字句解析+構文解析+意味解析を含み、パース木や論理計画(Relational Algebra)を生成します。
- 最適化はルールベース(等価変換)やコストベース(統計に基づくコスト推定)で行い、結合順序やインデックス利用、アクセス方法(フルスキャン/インデックススキャン)を決定します。
- コード生成は各演算子を実行エンジンが理解する具体的オペレータに変換し、ネストループ/ハッシュ結合など具体的アルゴリズムを割り当てます。
- 実装によっては「実行計画生成」と「コード生成」の呼び方や分割が異なりますが、概念上は解析→最適化→生成の順となります。
FAQ
Q1: 最適化は常にコストベースですか?
A1: いいえ。ルールベースでの変換のみ行う場合や、コストベースと組み合わせる実装もあります。統計が不十分だとルール重視になることがあります。
A1: いいえ。ルールベースでの変換のみ行う場合や、コストベースと組み合わせる実装もあります。統計が不十分だとルール重視になることがあります。
Q2: コード生成と実行計画は同じ意味ですか?
A2: ほぼ同義で使われる場合が多いですが、厳密には物理実行計画をさらに実行エンジン用の低レベル命令に落とす工程をコード生成と呼ぶことがあります。
A2: ほぼ同義で使われる場合が多いですが、厳密には物理実行計画をさらに実行エンジン用の低レベル命令に落とす工程をコード生成と呼ぶことがあります。
Q3: インデックス選択はどの段階で決定されますか?
A3: 通常は最適化段階で決定されます。コスト見積もりに基づきインデックス利用の有無を判断します。
A3: 通常は最適化段階で決定されます。コスト見積もりに基づきインデックス利用の有無を判断します。
関連キーワード: DBMS、クエリ処理、構文解析、パース木、クエリ最適化、物理計画、コード生成、実行計画、コストベース最適化、結合アルゴリズム

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

