Как я могу получить запрос, который использует OR в предложении WHERE, чтобы разделить себя на два запроса с помощью UNION во время компиляции? Если я переписываю его вручную, запрос с использованием 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 и условие1 - все это более длинные выражения. Кикер в том, что только одно из условий в ИЛИ когда-либо выполняется.
Сначала я подумал, что мог бы просто переписать его, чтобы выполнить объединение, но затем я повторяю columnlist, joincond2, joincond3 и condition1, то есть примерно 20 строк SQL, которые в будущем могут потребовать много обслуживания. Могу ли я дать подсказку или какой-нибудь лучший способ написать предложение WHERE? Заранее спасибо.