今回はサブクエリに関してです。
もちろんSQL実践入門を読み進めています。
SQL上ではテーブル、ビュー、サブクエリというのは機能的にはそれほど変わらず主にパフォーマンスの点で違いがでてきます。
以下に簡単な特徴を述べます。
Contents
テーブル、ビュー、サブクエリの特徴
テーブル
永続的かつデータを保持する
ビュー
永続的だがデータは保持しないため、アクセスのたびにSQLが実行される
サブクエリ
非永続的なので生存期間(スコープ)がSQL文の実行中に限られる
サブクエリの問題点
ここでサブクエリの問題点を挙げておきます。
計算コストが上乗せされる
データを保持していないので、実行のたびにSELECTを実行してデータを作る必要があります。純粋にSELECT文実行にかかるコストが上乗せされます。
IOコストがかかる
計算した結果は、どこかに保持するため書き込む必要があります。うまくメモリに収まればよいですが、そうでない場合はストレージに書き込むことになり、遅延の原因になります。
最適化を受けられない
サブクエリにはインデックスが利かないため、最適化を受けることができません。
詳細はSQL実践入門の中にゆずりますが、サブクエリの中にはウィンドウ関数を使って代用できるものなどがかなり多くあります。この場合、ウィンドウ関数を使ったほうがパフォーマンスが良くなるケースがあるので積極的に利用しましょう。