H20 問3 (2)について

ミルキさん  
(No.1)
P君が作成したSQLのアクセスですが
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行の和が解答になります。
2021.09.23 03:56
関数従属さん 
DB ブロンズマイスター
(No.3)
こちらはYライセンスさんのおっしゃる通り

席種残数テーブルがチケットテーブルから(性能改善の為)作成されたものであり
チケットテーブルを公演番号、公演日、開演時刻、席種でGROUP BYするとY行になるのがポイントですね。

余談ですが、席種残数テーブルに"席数"の項目を持たせれば、
チケットテーブルとの結合も不要なシンプルなSQLとなり、アクセス行数もY行になりそうです。
2021.09.23 17:39

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop