SQLのinとexistsの効率って?


広告は適当。


SQLを使っていて、基本的に大きなテーブルをチェックするときは
in (select xxx from xxx)
で頑張るのではなく、
exists (select 1 from xxx)
ってやるんだよ、みたいな頭で居ました。そしてSQLのQAをしてて今回もそのコメントを書こうとして、

DB効率上がってるんだから、内部で最適化されてたりして、と思って記事を探したらこんなのが。

https://blog.withonoware.co.jp/tech/2017/09/24/%E3%80%8Enot-in%E3%80%8F%E3%80%8Enot-exists%E3%80%8F%E3%81%AE%E6%A4%9C%E8%A8%BC/

ここによると、「NOT IN」と「NOT EXISTS」ですらコストが等価ってなりました。
もっと大容量だと話は違うかもしれませんが、今の最適度合いからしたらそうだよなあ、と思いました。

そのうち時間を見つけて検証してみたいと思います。