2008-11-14 14 views
3

Comment les instructions conditionnelles (telles que IF ... ELSE) affectent le plan d'exécution de requête dans SQL Server (2005 et versions ultérieures)?SQL Server - Plan d'exécution de requête pour les instructions conditionnelles

Les instructions conditionnelles peuvent-elles provoquer des plans d'exécution médiocres et existe-t-il une forme de conditionnalité dont vous devez vous méfier lorsque vous prenez en compte les performances?

** Edité ajouter **:

Je fais référence au plan d'exécution de la requête en cache. Par exemple, lors de la mise en cache du plan d'exécution de la requête dans l'instance ci-dessous, deux plans d'exécution sont-ils mis en cache pour chacun des résultats du conditionnel?

DECLARE @condition BIT 

IF @condition = 1 
BEGIN 
    SELECT * from ... 
END 
ELSE 
BEGIN 
    SELECT * from .. 
END 

Répondre

2

Vous obtiendrez des recompilations de plan souvent avec cette approche. J'essaie généralement de les séparer, si vous vous retrouvez avec:

DECLARE @condition BIT 

IF @condition = 1 
BEGIN 
EXEC MyProc1 
END 
ELSE 
BEGIN 
EXEC MyProc2 
END 

De cette façon, il n'y a pas de différence pour les utilisateurs finaux, et MAPROC1 & 2 obtenir leurs propres plans d'exécution mises en cache appropriés. Une procédure, une requête.

+0

@Meff (+1) est correct. Ma réponse précédente n'était pas (donc je l'ai supprimé). –