MySQLのnot exists文が重いときに書き換えた代用文

 

データ構造がきちんと設計されていて

indexが貼られてたりしてるといいんだろうけど、

そうでない場合、NOT EXISTS文を使うとかなり重くなることがある。

その場合は以下のようにLEFT JOIN に書き換えることで速度が改善されることがある。

 SELECT tbl_name1.col_name1 
 FROM tbl_name1
 WHERE NOT EXISTS (SELECT * FROM tbl_name2 WHERE ...) ;

 SELECT tbl_name1.col_name1 
 FROM tbl_name1
  LEFT JOIN tbl_name2 ON tbl_name2.col_name1 = tbl_name1.col_name1 and ... 
 WHERE tbl_name2.col_name1 is null ;

 

この対応によって該当のクエリのレスポンスは10秒以上改善されたが、

当然のことながら、根本解決にはなっていないので

いつかなんとかせねば