Estoy usando SQL Server 2008 R2 y tengo esta pseudo consulta (SP):
select ...
from ...
WHERE @LinkMode IS NULL
AND (myColumn IN (...very long-running query...))
...
...
El problema es que la consulta tarda mucho tiempo en ejecutarse, incluso si ejecuto el SP con @LinkMode=2
.
Como notó, la consulta de larga duración debe ejecutarse solo si @LinkMode es nulo, que no es el caso aquí. En mi caso @LinkMode = 2!
Sin embargo, si lo cambio a:
select ...
from ...
WHERE 1=2
AND (myColumn IN (...very long time exeted query...))
...
...
el SP no correr rápido.
He escuchado antes que a veces el optimizador puede optimizar el orden de los criterios.
Entonces pregunto :
Incluso si el optimizador elige una ruta diferente, ¿qué puede ser más rápido que verificar si
=null
? Quiero decir, creo que verificarif a==null
es mucho más rápido que ejecutar la otra consulta larga ...¿Cómo puedo forzar a SQL Server a ejecutar la consulta tal como la he escrito (el mismo orden)?
fuente