Écart de performances des requêtes entre le code et SSMS
Un développeur a rencontré une différence de performances significative lors de l'exécution de la même requête dans le code C# et dans la gestion de SQL Server Studio (SSMS). Alors que la requête s'est terminée en moins de 3 secondes dans SSMS, elle a pris plus de 3 minutes lorsqu'elle est exécutée dans l'application.
Cause première du problème de performances
Après un examen plus approfondi, le problème a été identifié comme étant une différence subtile entre les paramètres de requête utilisés dans le code C# et SSMS. Dans le code C#, le paramètre de l'ID client a été transmis en tant que type NVARCHAR, tandis que dans la requête SSMS, il a été déclaré en tant que type VARCHAR.
Impact de priorité du type de données
En raison des règles de priorité des types de données, le paramètre NVARCHAR dans la requête C# a empêché la requête d'exploiter une recherche d'index. Cela a entraîné une analyse de la table, augmentant considérablement le temps d'exécution. En revanche, le paramètre VARCHAR dans la requête SSMS permettait à l'optimiseur de requête d'utiliser une recherche d'index, ce qui entraînait une exécution plus rapide.
Solution au problème de performances
Pour résoudre le problème écart de performances, le développeur avait deux options :
Option 1 : Utiliser le paramètre avec spécifié Type
En utilisant le constructeur qui accepte un type, le développeur a explicitement défini le paramètre comme un type VARCHAR :
Parameters.Add("@clientID", SqlDbType.Varchar, 200)
Cela garantit que le paramètre est transmis comme le type correct et n'interfère pas avec la capacité SARG de la requête.
Option 2 : paramètre de conversion en SQL Requête
Alternativement, le développeur peut convertir le paramètre dans la requête SQL comme suit :
where client_id = cast(@clientID as varchar(200))
Cette méthode résout également le problème de type et permet à la requête d'exploiter la recherche d'index .
Supplémentaire Recommandations
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!