Optimisation du plan d'exécution des procédures stockées SQL : reniflage des paramètres et son impact
Les performances des procédures stockées SQL peuvent être significativement affectées par un phénomène connu comme reniflage de paramètres. Cela se produit lorsque le moteur de base de données compile le plan d'exécution d'une procédure stockée en fonction des valeurs des paramètres d'entrée fournis au moment de la compilation.
Considérez la procédure stockée suivante :
CREATE PROCEDURE MyProc @MyDate DATETIME = NULL AS IF @MyDate IS NULL SET @MyDate = CURRENT_TIMESTAMP -- Do Something using @MyDate
Dans ce Dans ce scénario, si @MyDate est transmis comme NULL lors de la compilation initiale, la base de données optimise le plan d'exécution pour cette valeur. Cependant, les appels ultérieurs à la procédure avec d'autres valeurs d'entrée peuvent entraîner de mauvaises performances, même si ces valeurs sont également NULL.
Impact du reniflage des paramètres
Le reniflage des paramètres peut avoir plusieurs conséquences négatives :
Étude de cas : le reniflage de paramètres a disparu Faux
Dans le cas mentionné, le plan d'exécution généré pour @MyDate était médiocre même lorsque la valeur utilisée était NULL. Ce comportement est inhabituel et suggère un problème avec le reniflage des paramètres.
Solution : Désactiver le reniflage des paramètres
Une solution consiste à désactiver le reniflage des paramètres en utilisant une variable de paramètre comme suit :
CREATE PROCEDURE MyProc @MyDate DATETIME = NULL AS DECLARE @MyDate_Copy DATETIME SET @MyDate_Copy = @MyDate IF @MyDate_Copy IS NULL SET @MyDate_Copy = CURRENT_TIMESTAMP -- Do Something using @MyDate_Copy
Aperçu de Problème
Le problème sous-jacent dans SQL Server 2005 est un problème connu lié à la détection de paramètres dans certains niveaux de correctifs. Dans SQL Server 2008, la clause OPTIMIZE FOR UNKNOWN peut être utilisée pour résoudre de tels problèmes.
Considérations supplémentaires
Pour améliorer davantage les performances lors de l'utilisation de procédures stockées avec des paramètres d'entrée, il est recommandé de :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!