Heim >Datenbank >MySQL-Tutorial >Warum ist meine SQL-Abfrage in C# 3 Minuten langsamer als 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)
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))
Diese Methode behebt auch das Typproblem und ermöglicht der Abfrage, die Indexsuche zu nutzen .
Zusätzlich Empfehlungen
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!