Exists句をORでつなげるべきではない

2016/06/25

メインテーブルがかなり大きく、Existsの中のテーブルがかなり小さく絞れる場合、Exists一つだけであればメインテーブルとの結合に変換されて早くなるが、ORでつなげるとメインテーブルの全件走査になってしまう。
Existsを二つORでつなげるならUNIONを使って実現すべき。

ただし、メインテーブルにORDER BY PKとLIMITがあり、かつEXISTS句の中がLIKE文のような場合だと、たとえかなり小さく絞れても、PKとLIMITを使用した方がいいと判断されてメインテーブルのPKによる全件走査になってしまうことがある。
(EXISTS句の中でUNIONを使わず1つのSQLだけなら問題ないことも多いが。)
そのような場合は、ヒント句と結合順序で調整した方が良い。

-SQL
-