Lorsque vous travaillez avec une application basée sur une base de données, il est important d’optimiser les performances de vos requêtes SQL. Une façon d’y parvenir est la paramétrisation, qui permet la réutilisation des plans de requête et améliore les performances des requêtes.
La paramétrisation est le processus de remplacement des valeurs littérales dans une requête par des paramètres. Ce faisant, l’optimiseur de requêtes de SQL Server peut générer un plan d’exécution plus efficace qui peut être réutilisé pour des requêtes similaires. Cela améliore non seulement les performances, mais réduit également la quantité de mémoire utilisée par le cache des plans de requête.
Jetons un coup d’œil à un exemple :
SELECT ClientId FROM clients WHERE (StateId = 2) and (TransactionId = 5)
SELECT ClientId FROM clients WHERE (StateId = 2) and (TransactionId = 6)
SELECT ClientId FROM clients WHERE (StateId = 2) and (TransactionId = 7)
SELECT ClientId FROM clients WHERE (StateId = 2) and (TransactionId = 8)
Dans cet exemple, la requête est répétée plusieurs fois avec des identifiants de transaction différents. Sans paramétrisation, l’optimiseur de requêtes traiterait chaque requête comme une entité distincte et générerait un nouveau plan d’exécution pour chacune d’entre elles. Cependant, en paramétrisant la requête, l’optimiseur de requêtes peut générer un seul plan d’exécution qui peut être réutilisé pour toutes les requêtes similaires.
La paramétrisation dans une application basée sur une base de données est généralement réalisée à l’aide de déclarations préparées ou de procédures stockées. Voici un exemple utilisant des déclarations préparées en C# :
SqlCommand command = new SqlCommand(String.Empty, connection);
string query = "SELECT ClientId FROM clients WHERE (StateId = @stateId) and (TransactionId = @transactionId);";
command.CommandText = query;
command.Parameters.Add("@stateId", SqlDbType.Int).Value = 2;
command.Parameters.Add("@transactionId", SqlDbType.Int).Value = 5;
command.ExecuteReader();
En utilisant des paramètres, nous pouvons nous assurer que la requête est optimisée et que le plan d’exécution est réutilisé. Cela améliore non seulement les performances, mais protège également contre les attaques par injection SQL.
Il existe deux types de paramétrisation dans SQL Server :
- Paramétrisation simple : Il s’agit du mode de paramétrisation par défaut dans SQL Server. Il paramètre uniquement les requêtes simples qui répondent à certains critères, tels que l’absence de jointures, de sous-requêtes et de fonctions.
- Paramétrisation forcée : Ce mode force la paramétrisation pour toutes les requêtes, quel que soit leur complexité. Il peut être activé en utilisant l’indice de requête
OPTION(PARAMETERIZATION FORCED)
ou en définissant l’option de paramétrisation de la base de données surFORCED
.
Il est important de noter que la paramétrisation peut avoir un impact significatif sur les performances des requêtes. Il est recommandé de tester et d’analyser les performances de vos requêtes avant et après la mise en œuvre de la paramétrisation pour obtenir des résultats optimaux.
En conclusion, la paramétrisation est une technique puissante qui peut améliorer les performances de vos requêtes SQL. En remplaçant les valeurs littérales par des paramètres, vous pouvez optimiser les plans d’exécution des requêtes et réduire l’utilisation de la mémoire. Que vous choisissiez la paramétrisation simple ou la paramétrisation forcée, il est important de tester et d’analyser l’impact sur les performances pour obtenir les meilleurs résultats pour votre application.