Zapytanie działa dłużej, dodając nieużywane warunki WHERE

Uderzyłem w interesujący zaczep (co najmniej interesujący dla mnie). Poniżej znajduje się ogólne wyobrażenie o tym, jak wygląda moje zapytanie. Załóżmy, że @AuthorType jest wejściem do procedury składowanej i że istnieją różne wyspecjalizowane warunki dla każdego miejsca, w którym umieściłem komentarze.

SELECT *
FROM TBooks
WHERE
(--...SOME CONDITIONS)
OR
(@AuthorType = 1 AND --...DIFFERENT CONDITIONS)
OR
(@AuthorType = 2 AND --...STILL MORE CONDITIONS)

Interesujące jest to, że jeśli wykonam ten SP z @AuthorType = 0, działa wolniej niż jeśli usunę dwa ostatnie zestawy warunków (te, które dodają warunki dla wyspecjalizowanych wartości @AuthorType).

Czy SQL Server nie powinien realizować w czasie wykonywania, że ​​te warunki nigdy nie zostaną spełnione i całkowicie je zignorować? Różnica, jakiej doświadczam, nie jest mała; w przybliżeniu podwaja długość zapytania (1-2 sekundy do 3-5 sekund).

Czy oczekuję, że SQL Server zoptymalizuje to zbyt wiele dla mnie? Czy naprawdę muszę mieć 3 oddzielne SP dla specjalnych warunków?

questionAnswers(3)

yourAnswerToTheQuestion