HOME»データベーススペシャリスト掲示板»H20 問3 (2)について
投稿する
H20 問3 (2)について [0237]
ミルキさん(No.1)
P君が作成したSQLのアクセスですが
C2から1行選択して
"席種残数"を結合するので
(1+Y)*Zだと思ったのですが
答えはZ+Y*Yでした。
ご存じの方がいれば教えてください。
C2から1行選択して
"席種残数"を結合するので
(1+Y)*Zだと思ったのですが
答えはZ+Y*Yでした。
ご存じの方がいれば教えてください。
2021.09.21 22:48
Yライセンスさん(No.2)
解答はZ+Y*Yですよ。
お聞きになりたいのは、なぜ上記が解答になるのかということでしょうか?
設問3(1)の[図5のSQL文のRDBMS処理手順]と照らし合わせながら、以下のように考えてみてください。
1.Zは副問合せのSELECT文におけるアクセス行数になります。チケットテーブルから全行をSELECTするので、アクセス行数は設問3(2)に記載の通りZ行ということになります。
2.1.で実行されたSELECT文はGROUP BYされているので、結果行はY行となります。これは、席種残数テーブルと同じ行数です。GROUP BYに指定されている列の組み合わせからわかるかと思います。このY行の結果行がバッファに格納されることになります。
3.次に主問合せが実行されていきますが、主問合せの1行毎に、2.でバッファに格納されたY行を読み込み、結合できるか否かが判定されます。これをネステッドループ結合と言います。主問合せにおいては、Y行が読み込まれますが、その1行毎にバッファから2.のY行が読み込まれるので、結合処理は合計で、Y*Y行がアクセス行数となります。
1.のZ行と3.のY*Y行の和が解答になります。
お聞きになりたいのは、なぜ上記が解答になるのかということでしょうか?
設問3(1)の[図5のSQL文のRDBMS処理手順]と照らし合わせながら、以下のように考えてみてください。
1.Zは副問合せのSELECT文におけるアクセス行数になります。チケットテーブルから全行をSELECTするので、アクセス行数は設問3(2)に記載の通りZ行ということになります。
2.1.で実行されたSELECT文はGROUP BYされているので、結果行はY行となります。これは、席種残数テーブルと同じ行数です。GROUP BYに指定されている列の組み合わせからわかるかと思います。このY行の結果行がバッファに格納されることになります。
3.次に主問合せが実行されていきますが、主問合せの1行毎に、2.でバッファに格納されたY行を読み込み、結合できるか否かが判定されます。これをネステッドループ結合と言います。主問合せにおいては、Y行が読み込まれますが、その1行毎にバッファから2.のY行が読み込まれるので、結合処理は合計で、Y*Y行がアクセス行数となります。
1.のZ行と3.のY*Y行の和が解答になります。
2021.09.23 03:56
関数従属さん(No.3)
★DB ブロンズマイスター
こちらはYライセンスさんのおっしゃる通り
席種残数テーブルがチケットテーブルから(性能改善の為)作成されたものであり
チケットテーブルを公演番号、公演日、開演時刻、席種でGROUP BYするとY行になるのがポイントですね。
余談ですが、席種残数テーブルに"席数"の項目を持たせれば、
チケットテーブルとの結合も不要なシンプルなSQLとなり、アクセス行数もY行になりそうです。
席種残数テーブルがチケットテーブルから(性能改善の為)作成されたものであり
チケットテーブルを公演番号、公演日、開演時刻、席種でGROUP BYするとY行になるのがポイントですね。
余談ですが、席種残数テーブルに"席数"の項目を持たせれば、
チケットテーブルとの結合も不要なシンプルなSQLとなり、アクセス行数もY行になりそうです。
2021.09.23 17:39