首頁 > 資料庫 > mysql教程 > 為什麼 C# 中的 SQL 查詢比 SSMS 慢 3 分鐘?

為什麼 C# 中的 SQL 查詢比 SSMS 慢 3 分鐘?

Mary-Kate Olsen
發布: 2024-12-31 07:43:10
原創
856 人瀏覽過

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

程式碼和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))
    登入後複製

    此方法還解決了類型問題並允許查詢利用索引

其他建議

  • 使用顯式參數長度:為了防止快取污染,開發者建議在使用Option時明確指定 VARCHAR 參數的長度1.
  • 參考推薦文章:鼓勵開發者參考《應用程式慢,SSMS 快?了解效能之謎”,進一步深入了解程式碼和 SSMS 之間的效能差異。

以上是為什麼 C# 中的 SQL 查詢比 SSMS 慢 3 分鐘?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板