Maison >base de données >tutoriel mysql >Pourquoi ma requête SQL est-elle beaucoup plus lente dans le code que dans SSMS ?
Pourquoi une requête est-elle significativement plus lente lorsqu'elle est exécutée dans du code que dans SSMS ?
Malgré le même environnement de requête et d'exécution, une requête peut présentent une différence de temps notable lorsqu’ils sont exécutés dans le code par rapport à SQL Server Management Studio (SSMS). Cette question examine les causes sous-jacentes de cet écart.
Enquête sur le problème
La comparaison de code fournie révèle un écart dans le type de données du paramètre @clientID entre le Code C# et script SSMS. En C#, la méthode AddWithValue ajoute le paramètre en tant que NVARCHAR, tandis qu'en SSMS, le paramètre est déclaré en tant que VARCHAR.
Précédence du type de données et capacité SARG
En raison des règles de priorité des types de données, l'expression Where client_id = @clientID devient non compatible avec SARG (argument de recherche) lorsque @clientID est de tapez NVARCHAR, en supposant que la colonne client_id est de type VARCHAR. Cela oblige l'optimiseur de requêtes à effectuer une analyse de table coûteuse.
Solution
Pour résoudre cet écart, soit :
SqlParameter clientIDParam = new SqlParameter("@clientID", SqlDbType.Varchar, 200); clientIDParam.Value = ClientID; ada.SelectCommand.Parameters.Add(clientIDParam);
Where client_id = cast(@clientID as varchar(200))
Spécifier explicitement le type de données permet d'éviter d'éventuels problèmes de pollution du cache.
Considérations supplémentaires
En comprenant ces types de données subtilités et en mettant en œuvre les solutions recommandées, vous pouvez résoudre l'écart de performances des requêtes entre le code et SSMS.
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!