【SQL】EXISTSの速度とJOIN句への書き換えについて
【今回の紹介】
EXISTSについて調べたので、メモを残します。
現在、所属pjではEXISTSが非常に多く使用されている。
よく、サブクエリとして使用する際にinかEXISTSどちらが高速かという
議論があるが、今回はJOIN句への書き換えが有効ということが分かった
【内容】
■existsについて
・相関サブクエリ(exists句にて、メインのデータを参照するサブクエリ)として使用した場合、
メインクエリの行分だけ比較処理が行われるため、メインクエリの件数に伴い遅くなる
・existsはたいてい、JOINに書き換え可能。その際、JOINデータが先に実行され結合するデータが絞ることが可能なため、速度が速くなる
相関サブクエリの処理の流れ
1.メインクエリの行の取り出し
2.サブクエリの条件と一致するか判定
3.一致した場合、結果セットを出力する(TRUE)
4.サブクエリから返された結果セットをメインクエリのselect内の形式で出力
※相関サブクエリを使用したEXISTSの場合、上記の処理をメインクエリの行数分行う。
よって、件数に比例して速度が遅くなりがち
■参考
☆相関サブクエリのJOIN句への書き換えのすすめ とてもわかりやすい!!
☆サブクエリについての考え方
[SQL] 7. サブクエリ 1 | TECHSCORE(テックスコア)
☆EXISTSについて