Il m'a été suggéré que l'utilisation d'instructions IF dans des lots t-SQL nuisait aux performances. J'essaie de trouver une confirmation ou de valider cette affirmation. J'utilise SQL Server 2005 et 2008.
L'affirmation est qu'avec le lot suivant: -
IF @parameter = 0
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
SQL Server ne peut pas réutiliser le plan d'exécution généré car la prochaine exécution peut nécessiter une branche différente. Cela implique que SQL Server éliminera entièrement une branche du plan d'exécution sur la base du fait que pour l'exécution en cours, il peut déjà déterminer quelle branche est nécessaire. Est-ce vraiment vrai?
De plus ce qui se passe dans ce cas: -
IF EXISTS (SELECT ....)
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
où il n'est pas possible de déterminer à l'avance quelle branche sera exécutée?