Tengo una consulta en una tabla grande que se ve así:
declare @myIdParam int = 1
select *
from myTable
where (@myIdParam is null or myTable.Id = @myIdParam)
Hay varios condicionales similares como este en la cláusula where, y también hay muchas uniones, pero este es un resumen.
Efectivamente, si @myIdParam es nulo, no queremos restringir los resultados usando este parámetro.
No soy un DB pro, pero de mis pruebas parece que esta verificación NULL se realiza para cada registro y no se optimiza de ninguna manera.
Si elimino la comprobación nula y asumo que el parámetro no es nulo, la consulta vuelve instantáneamente. De lo contrario, demora hasta diez segundos.
¿Hay alguna manera de optimizar esto para que la verificación se realice solo una vez en tiempo de ejecución?
OPTION(RECOMPILE)