Warum ist eine Abfrage deutlich langsamer, wenn sie im Code ausgeführt wird als in SSMS?
Obwohl die gleiche Abfrage- und Ausführungsumgebung vorhanden ist, kann eine Abfrage möglicherweise weisen bei der Ausführung im Code im Vergleich zu SQL Server Management Studio (SSMS) einen deutlichen Zeitunterschied auf. Diese Frage befasst sich mit den zugrunde liegenden Ursachen für diese Diskrepanz.
Untersuchung des Problems
Der bereitgestellte Codevergleich zeigt eine Diskrepanz im Datentyp des @clientID-Parameters zwischen den C#-Code und das SSMS-Skript. In C# fügt die AddWithValue-Methode den Parameter als NVARCHAR hinzu, während in SSMS der Parameter als VARCHAR deklariert wird.
Datentyppriorität und SARG-Fähigkeit
Aufgrund der Prioritätsregeln für Datentypen wird der Ausdruck „Where client_id = @clientID“ nicht SARG-fähig (Suchargument), wenn @clientID vom Typ ist NVARCHAR, vorausgesetzt, die Spalte „client_id“ ist vom Typ VARCHAR. Dies zwingt den Abfrageoptimierer dazu, einen kostspieligen Tabellenscan durchzuführen.
Lösung
Um diese Diskrepanz zu beheben, gehen Sie entweder wie folgt vor:
SqlParameter clientIDParam = new SqlParameter("@clientID", SqlDbType.Varchar, 200); clientIDParam.Value = ClientID; ada.SelectCommand.Parameters.Add(clientIDParam);
Where client_id = cast(@clientID as varchar(200))
Die explizite Angabe des Datentyps trägt dazu bei, potenzielle Cache-Verschmutzungsprobleme zu vermeiden.
Weitere Überlegungen
Durch das Verständnis dieser Daten Geben Sie Feinheiten ein und implementieren Sie die empfohlenen Lösungen. Sie können die Diskrepanz in der Abfrageleistung zwischen Code und SSMS beheben.
Das obige ist der detaillierte Inhalt vonWarum ist meine SQL-Abfrage im Code viel langsamer als in SSMS?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!