Ich verwende SQL Server 2008 R2 und habe diese Pseudoabfrage (SP):
select ...
from ...
WHERE @LinkMode IS NULL
AND (myColumn IN (...very long-running query...))
...
...
Das Problem ist, dass die Ausführung der Abfrage sehr lange dauert - auch wenn ich den SP mit ausführe @LinkMode=2
.
Wie Sie bemerkt haben, sollte die Langzeitabfrage nur ausgeführt werden, wenn @LinkMode null ist, was hier nicht der Fall ist. In meinem Fall @LinkMode = 2!
Wenn ich es jedoch ändere in:
select ...
from ...
WHERE 1=2
AND (myColumn IN (...very long time exeted query...))
...
...
der SP läuft schnell.
Ich habe zuvor gehört, dass der Optimierer manchmal die Reihenfolge der Kriterien optimieren kann .
Deshalb frage ich :
Auch wenn der Optimierer eine andere Route wählt, was kann schneller sein als zu überprüfen, ob
=null
? Ich meine, ich denke , dass Kontrolleif a==null
ist viel schneller als die andere lange Abfrage läuft ...Wie kann ich SQL Server zwingen , die Abfrage so auszuführen, wie ich sie geschrieben habe (in derselben Reihenfolge)?
quelle