MySQLサブクエリ

MySQLは内部的にINを直接処理することができないので、EXISTSに変換することでSQL的には相関のないサブクエリも相関サブクエリになってしまうのである。これがまさにMySQLのサブクエリが遅い!と言われている原因だろう。

EXISTSの方がINより速いと思っていたのでEXISTSを使うようにしていたが、それがこういう理由だったとは…。EXISTS句の方がINサブクエリより速いのは、IN句を使うときに適切なINDEXを作成していなかったのが原因だったらしい。

explainを見ていれば気付いただろうが、もう最初からEXISTSで書くようにしていたので気付く機会すらなかった。思い込みは良くないな…