У меня есть запрос к большой таблице, которая выглядит так:
declare @myIdParam int = 1
select *
from myTable
where (@myIdParam is null or myTable.Id = @myIdParam)
В предложении where есть несколько подобных условных выражений, подобных этому, и есть также много объединений, но это краткое изложение.
Фактически, если @myIdParam имеет значение null, мы не хотим ограничивать результаты с помощью этого параметра.
Я не специалист по БД, но из моих тестов кажется, что эта проверка NULL выполняется для каждой записи и никак не оптимизирована.
Если я уберу проверку «ноль» и предположу, что параметр не равен нулю, запрос мгновенно возвращается. В противном случае это займет до десяти секунд.
Есть ли способ оптимизировать это, чтобы проверка выполнялась только один раз во время выполнения?
OPTION(RECOMPILE)