Мне было предложено, чтобы использование операторов IF в пакетах t-SQL отрицательно сказывалось на производительности. Я пытаюсь найти подтверждение или подтвердить это утверждение. Я использую SQL Server 2005 и 2008.
Утверждение таково со следующей партией:
IF @parameter = 0
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
SQL Server не может повторно использовать сгенерированный план выполнения, поскольку для следующего выполнения может потребоваться другая ветвь. Это подразумевает, что SQL Server полностью исключит одну ветвь из плана выполнения на том основании, что для текущего выполнения он уже может определить, какая ветвь необходима. Это правда?
Кроме того, что происходит в этом случае:
IF EXISTS (SELECT ....)
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
где невозможно заранее определить, какая ветвь будет выполнена?