J'utilise SQL Server 2008 R2 et j'ai cette pseudo requête (SP):
select ...
from ...
WHERE @LinkMode IS NULL
AND (myColumn IN (...very long-running query...))
...
...
Le problème est que l'exécution de la requête prend très longtemps - même si j'exécute le SP avec @LinkMode=2
.
Comme vous l'avez remarqué, la requête de longue durée ne doit être exécutée que si @LinkMode est null, ce qui n'est pas le cas ici. Dans mon cas, @LinkMode = 2!
Cependant, si je le change en:
select ...
from ...
WHERE 1=2
AND (myColumn IN (...very long time exeted query...))
...
...
le SP ne fonctionne rapidement.
J'ai entendu auparavant que parfois l'optimiseur peut optimiser l'ordre des critères.
Alors je demande :
Même si l'optimiseur choisit un itinéraire différent, quoi de plus rapide que de vérifier si
=null
? Je veux dire, je pense que la vérificationif a==null
est beaucoup plus rapide que l'exécution de l'autre longue requête ...Comment puis-je forcer SQL Server à exécuter la requête telle que je l'ai écrite (dans le même ordre)?
la source