Mi è stato suggerito che l'uso delle istruzioni IF nei batch t-SQL è dannoso per le prestazioni. Sto cercando di trovare qualche conferma o convalidare questa affermazione. Sto usando SQL Server 2005 e 2008.
L'affermazione è che con il seguente batch: -
IF @parameter = 0
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
SQL Server non può riutilizzare il piano di esecuzione generato perché l'esecuzione successiva potrebbe richiedere un ramo diverso. Ciò implica che SQL Server eliminerà completamente un ramo dal piano di esecuzione sulla base del fatto che per l'esecuzione corrente può già determinare quale ramo è necessario. È davvero vero?
Inoltre cosa succede in questo caso: -
IF EXISTS (SELECT ....)
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
dove non è possibile determinare in anticipo quale ramo verrà eseguito?