Eu tenho uma consulta em uma tabela grande que se parece com isso:
declare @myIdParam int = 1
select *
from myTable
where (@myIdParam is null or myTable.Id = @myIdParam)
Existem vários condicionais semelhantes como este na cláusula where e também há muitas junções, mas este é um resumo.
Efetivamente, se @myIdParam for nulo, não queremos restringir os resultados usando esse parâmetro.
Eu não sou um profissional de banco de dados, mas pelos meus testes parece que essa verificação NULL é feita para todos os registros e não é otimizada de forma alguma.
Se eu remover a verificação nula e supor que o parâmetro não é nulo, a consulta retornará instantaneamente. Caso contrário, leva até dez segundos.
Existe uma maneira de otimizar isso para que a verificação seja feita apenas uma vez em tempo de execução?
OPTION(RECOMPILE)