新卒から文系エンジニア→人材業界に転職した人のブログ

新卒から文系エンジニア→人材業界に転職。技術・スキルがないためブログを通して勉強。その後、IT業界の業界知識が活かせる人材業界へ。異業種×異職種の転職経験有り。

このエントリーをはてなブックマークに追加

【SQL】EXISTSの速度とJOIN句への書き換えについて

【今回の紹介】

EXISTSについて調べたので、メモを残します。


現在、所属pjではEXISTSが非常に多く使用されている。
よく、サブクエリとして使用する際にinかEXISTSどちらが高速かという
議論があるが、今回はJOIN句への書き換えが有効ということが分かった


【内容】


■existsについて

 ・相関サブクエリ(exists句にて、メインのデータを参照するサブクエリ)として使用した場合、
  メインクエリの行分だけ比較処理が行われるため、メインクエリの件数に伴い遅くなる

 ・existsはたいてい、JOINに書き換え可能。その際、JOINデータが先に実行され結合するデータが絞ることが可能なため、速度が速くなる


 相関サブクエリの処理の流れ
  1.メインクエリの行の取り出し
  2.サブクエリの条件と一致するか判定
  3.一致した場合、結果セットを出力する(TRUE)
  4.サブクエリから返された結果セットをメインクエリのselect内の形式で出力
  ※相関サブクエリを使用したEXISTSの場合、上記の処理をメインクエリの行数分行う。
   よって、件数に比例して速度が遅くなりがち



■参考


☆相関サブクエリのJOIN句への書き換えのすすめ とてもわかりやすい!!

kkoudev.github.io


☆サブクエリについての考え方

[SQL] 7. サブクエリ 1 | TECHSCORE(テックスコア)

☆EXISTSについて

[SQL] 7. サブクエリ 2 | TECHSCORE(テックスコア)

.hatena-module:nth-of-type(10) { background: transparent; } .hatena-module:nth-of-type(10) .hatena-module-title{ display: none; } .hatena-module:nth-of-type(10) .hatena-module-body { padding: 0; }