Heim > Datenbank > MySQL-Tutorial > Warum ist meine SQL-Abfrage in C# 3 Minuten langsamer als in SSMS?

Warum ist meine SQL-Abfrage in C# 3 Minuten langsamer als in SSMS?

Mary-Kate Olsen
Freigeben: 2024-12-31 07:43:10
Original
855 Leute haben es durchsucht

Why is My SQL Query 3 Minutes Slower in C# Than in SSMS?

Diskrepanz bei der Abfrageleistung zwischen Code und SSMS

Ein Entwickler stellte einen erheblichen Leistungsunterschied fest, als er dieselbe Abfrage in C#-Code und SQL Server Management ausführte Studio (SSMS). Während die Abfrage in SSMS in weniger als 3 Sekunden abgeschlossen wurde, dauerte sie bei der Ausführung in der Anwendung mehr als 3 Minuten.

Ursache des Leistungsproblems

Nach weiterer Prüfung: Es wurde festgestellt, dass es sich bei dem Problem um einen geringfügigen Unterschied zwischen den im C#-Code und in SSMS verwendeten Abfrageparametern handelt. Im C#-Code wurde der Parameter für die Client-ID als NVARCHAR-Typ übergeben, während er in der SSMS-Abfrage als VARCHAR-Typ deklariert wurde.

Auswirkungen auf die Vorrangigkeit des Datentyps

Aufgrund der Prioritätsregeln für Datentypen verhinderte der NVARCHAR-Parameter in der C#-Abfrage, dass die Abfrage eine Indexsuche nutzte. Dies führte zu einem Tabellenscan, der die Ausführungszeit erheblich verlängerte. Im Gegensatz dazu ermöglichte der VARCHAR-Parameter in der SSMS-Abfrage dem Abfrageoptimierer die Verwendung einer Indexsuche, was zu einer schnelleren Ausführung führte.

Lösung für Leistungsprobleme

Um das zu beheben Aufgrund der Leistungsdiskrepanz hatte der Entwickler zwei Optionen:

  • Option 1: Parameter mit Angabe verwenden Typ

    Durch die Verwendung des Konstruktors, der einen Typ akzeptiert, hat der Entwickler den Parameter explizit als VARCHAR-Typ definiert:

    Parameters.Add("@clientID", SqlDbType.Varchar, 200)
    Nach dem Login kopieren

    Dadurch wird sichergestellt, dass der Parameter als korrekter Typ übergeben wird und beeinträchtigt nicht die SARG-Fähigkeit der Abfrage.

  • Option 2: Parameter in SQL umwandeln Abfrage

    Alternativ könnte der Entwickler den Parameter innerhalb der SQL-Abfrage wie folgt umwandeln:

    where client_id = cast(@clientID as varchar(200))
    Nach dem Login kopieren

    Diese Methode behebt auch das Typproblem und ermöglicht der Abfrage, die Indexsuche zu nutzen .

Zusätzlich Empfehlungen

  • Explizite Parameterlänge verwenden: Um eine Cache-Verschmutzung zu vermeiden, wird dem Entwickler empfohlen, die Länge des VARCHAR-Parameters explizit anzugeben, wenn Option 1 verwendet wird.
  • Referenz empfohlener Artikel: Dem Entwickler wird empfohlen, den Artikel „Langsam in der Anwendung, schnell in SSMS?“ zu lesen. Understanding Performance Mysteries“ für weitere Einblicke in Leistungsunterschiede zwischen Code und SSMS.

Das obige ist der detaillierte Inhalt vonWarum ist meine SQL-Abfrage in C# 3 Minuten langsamer als in SSMS?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage