Zasugerowano mi, że użycie instrukcji IF w partiach t-SQL jest szkodliwe dla wydajności. Próbuję znaleźć jakieś potwierdzenie lub potwierdzić to twierdzenie. Używam SQL Server 2005 i 2008.
Twierdzenie jest następujące:
IF @parameter = 0
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
SQL Server nie może ponownie użyć wygenerowanego planu wykonania, ponieważ następne wykonanie może wymagać innej gałęzi. Oznacza to, że SQL Server całkowicie wyeliminuje jedną gałąź z planu wykonania na podstawie tego, że dla bieżącego wykonania może już określić, która gałąź jest potrzebna. Czy to naprawdę prawda?
Ponadto, co dzieje się w tym przypadku:
IF EXISTS (SELECT ....)
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
gdzie nie można z góry ustalić, który oddział zostanie wykonany?