Мені було припущено, що використання операторів 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
де неможливо заздалегідь визначити, яка гілка буде виконуватися?