WHERE 句で OR を使用して、コンパイル中に UNION を使用して 2 つのクエリに分割するクエリを取得するにはどうすればよいですか? 手動で書き直すと、UNION を使用したクエリは、単一のクエリよりも 100 倍高速になります。これは、ユニオンの各クエリで異なるインデックスを効果的に使用できるためです。オプティマイザにこのアプローチを使用させる方法はありますか?
次のようなクエリがあります。
select columnlist
from table1
join table2 on joincond2
join table3 on joincond3
where conditions1
and ((@param1 is null and cond3a) or (cond3b))
ここで、columnlist、joincond2、joincond3、および conditions1 はすべて長い式です。キッカーは、OR の条件の 1 つだけが真になることです。
最初はユニオンを実行するように書き直せると思っていましたが、columnlist、joincond2、joincond3、および conditions1 を繰り返しています。これは、将来多くのメンテナンスが必要になる可能性のある 20 行ほどの SQL 行です。私が提供できるヒントや、WHERE句を書くためのより良い方法はありますか? 前もって感謝します。