程式碼和SSMS 之間的查詢效能差異
開發人員在C# 程式碼和SQL Server 管理中執行相同查詢時遇到顯著的性能差異工作室(SSMS)。雖然查詢在 SSMS 中不到 3 秒就完成了,但在應用程式中運行時卻花了 3 分鐘多。
效能問題的根本原因
經過進一步檢查,該問題被確定為 C# 程式碼和 SSMS 中使用的查詢參數之間的細微差別。在 C# 程式碼中,客戶端 ID 的參數會作為 NVARCHAR 類型傳遞,而在 SSMS 查詢中,它會宣告為 VARCHAR 類型。
資料類型優先影響
由於資料類型優先規則,C# 查詢中的 NVARCHAR 參數阻止查詢利用索引查找。這導致了表格掃描,顯著增加了執行時間。相較之下,SSMS 查詢中的 VARCHAR 參數允許查詢最佳化器使用索引查找,從而提高執行速度。
效能問題的解決方案
解決效能差異,開發者有兩個選擇:
選項1:使用指定類型的參數
透過使用接受類型的建構函數,開發者明確地將參數定義為VARCHAR類型:
Parameters.Add("@clientID", SqlDbType.Varchar, 200)
這保證了參數作為正確的類型傳遞,並且不會幹擾SARG 的能力
選項2:在SQL 查詢中轉換參數
或者,開發人員可以在SQL 查詢中轉換參數,如下所查詢示:
where client_id = cast(@clientID as varchar(200))
此方法還解決了類型問題並允許查詢利用索引
其他建議
以上是為什麼 C# 中的 SQL 查詢比 SSMS 慢 3 分鐘?的詳細內容。更多資訊請關注PHP中文網其他相關文章!