Maison >base de données >tutoriel mysql >Pourquoi ma requête SQL est-elle rapide dans SSMS mais lente dans mon application C# ?

Pourquoi ma requête SQL est-elle rapide dans SSMS mais lente dans mon application C# ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-04 07:04:34149parcourir

Why is my SQL Query Fast in SSMS but Slow in my C# Application?

Le code s'exécute lentement dans l'application mais rapidement dans SSMS

Problème :

Une requête qui renvoie rapidement des données dans SQL Server Management Studio (SSMS) prend beaucoup de temps lorsqu'il est exécuté à partir d'un C# application.

Code :

Le code C# utilise un SqlDataAdapter et sa méthode Fill pour exécuter la requête.

using (var conn = new SqlConnection(...))
using (var ada = new SqlDataAdapter(...))
{
    ada.Fill(Logs);
}

La requête SSMS est identique à celui exécuté dans le application.

Cause :

L'écart dans le temps d'exécution est dû à une différence dans la façon dont les paramètres sont gérés dans l'application et dans SSMS. Dans l'application, la méthode AddWithValue permet d'ajouter un paramètre de type NVARCHAR, tandis que dans SSMS, le paramètre est déclaré comme VARCHAR.

Solution :

Pour résoudre ce problème, soit :

  1. Utiliser le constructeur qui accepte un type lors de l'ajout de paramètres dans l'application code :
ada.SelectCommand.Parameters.Add("@clientID", SqlDbType.Varchar, 200);
  1. Castez le paramètre dans le texte SQL :
where client_id = cast(@clientID as varchar(200))

La première solution est préférée car elle résout également une pollution potentielle du cache problème.

Considérations supplémentaires :

  • Assurer que l'application et SSMS utilisent le même ordinateur et la même connexion.
  • Les tables référencées dans la requête ont des index appropriés et fonctionnent bien dans SSMS.
  • Considérez l'effet de la mise en cache des paramètres sur la requête performances.

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