為什麼在程式碼中執行查詢比在 SSMS 中執行要慢得多?
儘管具有相同的查詢和執行環境,查詢可能會與 SQL Server Management Studio (SSMS) 相比,在程式碼中執行時表現出顯著的時間差異。這個問題深入探討了這種差異的根本原因。
調查問題
提供的程式碼比較揭示了 @clientID 參數的資料類型之間的差異C# 程式碼和 SSMS 腳本。在 C# 中,AddWithValue 方法將參數新增為 NVARCHAR,而在 SSMS 中,參數被宣告為 VARCHAR。
資料型別優先權和SARG 能力
由於資料型別優先權和SARG 能力
由於資料型別優先規則,當@clientID 為時,Where client_id = @clientID 運算式會變成不可運算式(搜尋參數)型別為NVARCHAR,假設client_id 欄位的型別為VARCHAR。這會迫使查詢優化器執行代價高昂的表掃描。
解決方案
SqlParameter clientIDParam = new SqlParameter("@clientID", SqlDbType.Varchar, 200); clientIDParam.Value = ClientID; ada.SelectCommand.Parameters.Add(clientIDParam);
Where client_id = cast(@clientID as varchar(200))
指定正確的參數的資料類型C#:
指定正確的參數的資料類型C#:
以上是為什麼我的 SQL 查詢在程式碼中比在 SSMS 中慢得多?的詳細內容。更多資訊請關注PHP中文網其他相關文章!