我有一組針對在 SSMS 中運行良好的視圖的查詢。他們在 SSMS 中最多在 3 分鐘內完成,而不是在 Excel 中更長的時間(通過 Power Query)。我最近PARTITION BYs在它們所依賴的視圖之一中添加了更多內容,現在,也許巧合的是,它們現在在 SSMS 中的速度并不慢,但它們現在在 Excel 中查詢需要很長時間,以至于超時。
查詢太大,無法在此處發布。我的問題只是:我如何開始診斷這些問題并找到造成這種巨大差異的原因?
uj5u.com熱心網友回復:
這種行為——“SSMS 速度快,應用程式速度慢”可能是由 SQL Server 的一項稱為Parameter sniffing的功能引起的。
SQL Server 在執行具有引數的存盤程序時使用稱為引數嗅探的程序。當程序被編譯或重新編譯時,傳遞給引數的值被評估并用于創建執行計劃。然后將該值與執行計劃一起存盤在計劃快取中。在隨后的執行中,使用相同的值和相同的計劃。
此程序適用于任何查詢,而不僅僅是存盤程序。此外,引擎不僅“嗅探”引數值,還“嗅探”基數估計(表有多少行)。這意味著即使您的查詢沒有引數,我下面的建議也可能會有所幫助。
Erland Sommarskog的文章應用程式慢,SSMS 快,更詳細地解釋了這個和其他相關領域。無論我下面的建議是否對您有幫助,我都強烈建議您閱讀它。
我希望您使用 SQL Server 2008 或更高版本。首先,只需嘗試添加OPTION(RECOMPILE)到您的查詢中,如下所示:
SELECT *
FROM [MY_FINAL_VIEW]
OPTION(RECOMPILE)
;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/478226.html
