Sql-Server
為什麼程式碼中的查詢會比 SQL 工具中的查詢慢
當我們在沒有應用程序的情況下遇到性能問題時,我們要做的第一件事就是嘗試隔離問題是程式碼、查詢還是數據庫本身。最令人沮喪的部分是,在程式碼中執行或在 SQL 工具(如 SQL Server Management Studio 的查詢分析器)中執行的相同查詢可能具有完全不同的時間。
我們目前面臨一個問題,即在程式碼中執行相同的查詢(平均)需要 15-20 秒。在我們的一台開發筆記型電腦上(針對同一個數據庫伺服器)執行相同的查詢將花費相同的時間,而另一台開發筆記型電腦將在 3 秒內執行查詢。
我正在尋找為什麼相同的查詢,在一天中的同一時間對同一個數據庫執行,會根據它從哪裡執行而具有如此根本不同的時間(以及為什麼以前性能良好的查詢會突然變成一個更慢 -比蝸牛騎烏龜怪物,而不對數據庫進行任何更改)。與我們的程式碼相比,SQL Server Management Studio 等工具執行查詢的方式是否不同?
不同的執行計劃。
當您從不同的環境執行查詢時,許多事情必須相同才能重用記憶體的查詢計劃。
如果查詢依賴於隱式名稱解析,則包括臨時查詢的查詢文本、各種
SET
選項和登錄使用者的預設模式。這通常是參數嗅探問題的標誌,其中生成的最佳計劃可能會根據傳入的參數值而變化。當您在 SSMS 中執行查詢時,如果它不能重用應用程序正在使用的記憶體計劃,您會得到一個新的編譯的計劃適合被測參數值。