平成27年度 春期 午前 問30
データベース
クエリに関する問題
図は,DBMS が受け付けたクエリを実行するまでの処理の流れを表している。① 〜 ③ に入る処理の組合せとして,適切なものはどれか。
図(書き起こし): 処理の流れの図(絵)。横一列に矢印でつないだ形です。
クエリ →[ ① ]→[ ② ]→[ ③ ]→[ 実行 ] ①②③ と「実行」は四角のはこ,あいだは右向きの矢印。
選択肢も原典では罫線の表(記号の列 ア〜エ が行)です。
| ① | ② | ③ | |
|---|---|---|---|
| ア | コード生成 | 構文解析 | 最適化 |
| イ | コード生成 | 最適化 | 構文解析 |
| ウ | 構文解析 | コード生成 | 最適化 |
| エ | 構文解析 | 最適化 | コード生成 |
- ア①=コード生成,②=構文解析,③=最適化
- イ①=コード生成,②=最適化,③=構文解析
- ウ①=構文解析,②=コード生成,③=最適化
- エ①=構文解析,②=最適化,③=コード生成
答えと解説を見る
✓ これが正解エ①=構文解析,②=最適化,③=コード生成
解説
構文解析、最適化、コード生成の順に進みます。
受け付けたクエリは、まず文として正しく書かれているかを調べます。これが構文解析で、文の組み立てが分からなければ、どの表のどの列を求められているのかも読み取れません。次に、同じ結果を返す処理の道筋は普通いくつもあるので、索引の有無や行数の見積りをもとに費用の小さい道筋を選びます。これが最適化です。道筋が決まって初めて、それを実際に動かせる形の手順へ翻訳するコード生成へ進めます。したがって並びは、構文解析、最適化、コード生成の順になります。判定の軸は、コード生成を最適化より前に置けるかどうかという一点です。
ほかの選択肢はなぜ違うのか
- ア①=コード生成,②=構文解析,③=最適化:コード生成を先頭に置いています。文がどう組み立てられているかを構文解析で確かめる前では、何を動かす手順へ直せばよいのかが定まらないので、この処理が並びの先頭に来ることはありません。
- イ①=コード生成,②=最適化,③=構文解析:コード生成を先頭に置いたうえ、構文解析を末尾へ回しています。動かす手順を作ってから文の正しさを調べるのでは、誤りが見つかった時点で作った手順がまるごと無駄になってしまいます。
- ウ①=構文解析,②=コード生成,③=最適化:先頭を構文解析とする点は合っていますが、後ろの二つが入れ替わっています。費用の小さい道筋を選ぶ最適化は、どの手順を作るかを決めるための作業なので、コード生成より前に置く必要があります。
この問題の用語
- DBMSデータベースを管理するソフト。複数の処理が同じデータを同時に更新しても矛盾しないよう、排他制御などを行います。
出典:平成27年度 春期 基本情報技術者試験 午前 問30(改変:原典の図表をテキストに書き起こした)
同じ用語が出る問題
- 令和6年度 科目A 問7:原子性に関する問題(DBMS)
- 平成30年度 春期 午前 問27(DBMS)
- 平成29年度 秋期 午前 問39:SQLインジェクション攻撃の説明(DBMS)
- 平成29年度 秋期 午前 問26(DBMS)
- 平成28年度 春期 午前 問30:トランザクションに関する問題(DBMS)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)