Używam SQL Server 2008 R2 i mam tę pseudo-zapytanie (SP):
select ...
from ...
WHERE @LinkMode IS NULL
AND (myColumn IN (...very long-running query...))
...
...
Problem polega na tym, że zapytanie zajmuje bardzo dużo czasu - nawet jeśli uruchomię SP za pomocą @LinkMode=2
.
Jak zauważyłeś, długo działające zapytanie powinno być wykonane tylko wtedy, gdy @LinkMode ma wartość null, co nie ma miejsca w tym przypadku. W moim przypadku @LinkMode = 2!
Jeśli jednak zmienię to na:
select ...
from ...
WHERE 1=2
AND (myColumn IN (...very long time exeted query...))
...
...
SP działa szybko.
Słyszałem wcześniej, że czasami optymalizator może zoptymalizować kolejność kryteriów.
Więc pytam :
Nawet jeśli optymalizator wybierze inną trasę, co może być szybsze niż sprawdzenie, czy
=null
? Myślę, że sprawdzanieif a==null
jest znacznie szybsze niż uruchamianie innych długich zapytań ...Jak zmusić program SQL Server do uruchomienia zapytania w takiej formie, w jakiej go napisałem (ta sama kolejność)?
źródło