Estou usando o SQL Server 2008 R2 e tenho esta pseudo consulta (SP):
select ...
from ...
WHERE @LinkMode IS NULL
AND (myColumn IN (...very long-running query...))
...
...
O problema é que a consulta leva muito tempo para ser executada - mesmo que eu execute o SP com @LinkMode=2
.
Como você notou, a consulta de longa execução deve ser executada apenas se @LinkMode for nulo, o que não é o caso aqui. No meu caso, @LinkMode = 2!
No entanto, se eu mudar para:
select ...
from ...
WHERE 1=2
AND (myColumn IN (...very long time exeted query...))
...
...
o SP não correr rápido.
Ouvi dizer que às vezes o otimizador pode otimizar a ordem dos critérios.
Então eu pergunto :
Mesmo que o otimizador escolha uma rota diferente, o que pode ser mais rápido do que verificar se
=null
? Quero dizer, acho que a verificaçãoif a==null
é muito mais rápida do que executar a outra consulta longa ...Como forçar o SQL Server a executar a consulta conforme a escrevi (na mesma ordem)?
fonte