Ceci a comme conséquence deux requêtes paramétrées donc deux plans:
(@1 int,@2 nvarchar(3))select * from t1 where col1=@id and col2=@str
(@1 int,@2 nvarchar(4))select * from t1 where col1=@id and col2=@str
Comme le type et la longueur des paramètres ne sont
I. Paramétrage des requêtes côté client (3)
pas indiqués, des valeurs de paramètre de longueurs différentes peuvent potentiellement produire des plans paramétrés différents. Ceci peut causer une dégradation significative de performance pour SQL Server 2005 puisque toutes ces requêtes paramétrées seront stockées dans le même compartiment de hachage.
La raison est qu’elles ont le même texte et pour SQL Server 2005 seul le texte est utilisé pour le hachage, pas les paramètres. Pour les applications où il est impossible de changer le code côté de client, employer le Trace Flag 144 pour forcer le mappage des types côté serveur avec une longueur constante. Quand l’application a des requêtes qui sont incorrectement paramétrées, ce Trace Flag peut être très utile. Ceci aura comme conséquence seulement un plan paramétré :
(@1 tinyint,@2 varchar(8000))SELECT * FROM [t1] WHERE [col1]=@1 AND [col2]=@2
Noter que ce Trace Flag s’applique de façon globale au serveur. C’est dont une option qui pourrait avoir aussi de fâcheuse conséquence et doit être utilisée avec prudence. La méthode recommandée pour paramétrer les requêtes côté client est illustrée ci-dessous :
command.CommandText = "Select * From t1 Where col1 = @id And col2 = @str";
command.Parameters.Add("@id", SqlDbType.Int);
command.Parameters.Add("@str", SqlDbType.VarChar, 50);
command.Parameters[0].Value = 1;
command.Parameters[1].Value = "abc";
command.ExecuteNonQuery();
command.Parameters[0].Value = 2;
command.Parameters[1].Value = "abcd";
command.ExecuteNonQuery();
Conséquence, seulement un plan compilé pour les deux exécutions : Quelques points clés à noter. Nous avons paramétré la requête en indiquant le type de données et la longueur maximum pour les paramètres (nous indiquons la longueur maximum du paramètre Varchar en fonction de la colonne de la table). L’optimiseur essaiera de détecter les valeurs de paramètre (Parameter Sniffing) afin de choisir un plan optimal. Tandis que dans la plupart des cas ceci fonctionne à notre avantage, dans certains cas où les premières valeurs passées sont atypiques, il peut s’orienter sur un mauvais plan. Nous pouvons faire mieux que l’exemple ci-dessus en reportant la préparation de requête au moment de l’exécution :
command.CommandText = "Select * From t1 Where col1 = @id And col2 = @str";
command.Parameters.Add("@id", SqlDbType.Int);
command.Parameters.Add("@str", SqlDbType.VarChar, 50);
command.Parameters[0].Value = 1;
command.Parameters[1].Value = "abc";
command.Prepare(); command.ExecuteNonQuery();
command.Parameters[0].Value = 2;
command.Parameters[1].Value = "abcd";
command.ExecuteNonQuery();
Ici la préparation de requête est reportée au moment d’exécution et nous gagnons tous les avantages du paramétrage y compris le fait que nous ne devons pas envoyer le texte de la requête SQL sur le réseau à chaque fois. Pour ODBC l’attribut SQL_SOPT_SS_ DEFER_PREPARE (pour OLEBD c’est SSPROP_DEFERPREPARE) détermine si l’instruction est préparée immédiatement ou reportée à l’exécution (Voir la documentation en ligne pour plus d’information).
Au niveau du serveur, nous noterons un appel RPC a sp_prepexec avec le texte complet puis uniquement des appels RPC a sp_execute avec juste le handle et les paramètres.
Téléchargez cette ressource
Guide de Threat Intelligence contextuelle
Ce guide facilitera l’adoption d’une Threat Intelligence - renseignement sur les cybermenaces, cyberintelligence - adaptée au "contexte", il fournit des indicateurs de performance clés (KPI) pour progresser d' une posture défensive vers une approche centrée sur l’anticipation stratégique
Les articles les plus consultés
- IBM i célèbre ses 25 ans
- Activer la mise en veille prolongée dans Windows 10
- Cybersécurité Active Directory et les attaques de nouvelle génération
- N° 2 : Il faut supporter des langues multiples dans SharePoint Portal Server
- Partager vos images, vidéos, musique et imprimante avec le Groupe résidentiel
Les plus consultés sur iTPro.fr
- Travail hybride : pourquoi les salariés français restent les plus attachés au bureau en Europe
- Pourquoi la souveraineté des données relève du contrôle et non de la géographie
- L’incident OpenAI–Hugging Face n’est pas la révolution que vous imaginez
- Pourquoi les PME ne peuvent plus se permettre de négliger la sécurité de leur parc d’imprimantes
Articles les + lus
Couchbase lance AI Data Plane pour industrialiser l’IA agentique
Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
Computex 2026 : 5 signaux forts à retenir
La chaîne d’approvisionnement, point de rupture récurent du SI
Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
À la une de la chaîne Tech
- Couchbase lance AI Data Plane pour industrialiser l’IA agentique
- Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
- Computex 2026 : 5 signaux forts à retenir
- La chaîne d’approvisionnement, point de rupture récurent du SI
- Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
