Maison >base de données >tutoriel mysql >Pourquoi ma requête SQL est-elle beaucoup plus lente dans le code que dans SSMS ?

Pourquoi ma requête SQL est-elle beaucoup plus lente dans le code que dans SSMS ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-03 22:29:48985parcourir

Why is My SQL Query Much Slower in Code Than in 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 :

  • Spécifiez le bon type de données pour le paramètre en C# :
SqlParameter clientIDParam = new SqlParameter("@clientID", SqlDbType.Varchar, 200);
clientIDParam.Value = ClientID;
ada.SelectCommand.Parameters.Add(clientIDParam);
  • Castez le paramètre dans le texte SQL :
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

  • Assurez-vous que le code et SSMS utilisent la même chaîne de connexion à la base de données.
  • Analysez le plan d'exécution à partir des deux code et SSMS pour vérifier qu'ils sont similaires, indiquant des plans d'exécution optimaux.
  • Détectez si des problèmes de mémoire ou d'autres facteurs de performances affectent le temps d'exécution du code.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn