[SQL] 在SQL Server執行預存程式(Stored Procedure)或在程式中呼叫時,執行速度比直接下SQL還慢的原因與解決方法。
參數探測
在SQL Server執行或是在程式中呼叫SP的時候,發現執行的速度異常的慢,而直接跑SP裡的SQL速度卻很正常。於是上網查了一下,發現是因為參數探測行為造成的。
當初次編譯或執行SP,SQL Server會建立一個執行計畫。可以在SQL Server上方按下包括實際執行計畫,執行語法後便可以在執行結果旁看到執行計畫。
編譯與建立執行計畫時,所使用的任何參數值都會包含在產生的執行計畫中。後續執行SP時便會重用執行計畫達到減少記憶體壓力和CPU資源的效果。
如果後續執行SP都是使用常值作為參數,那麼都能夠重用執行計畫。反之則可能會誤用執行計畫,造成查詢效能成本過高、執行速度降低,發生參數探測的問題。
解決方法
使用本機變數:
在SP裡DECLARE新的參數來接傳入的參數
其他方法
1.SP執行時加上With Recompile:
在執行SP的語句後面加上With Recompile,重新編譯
2.使用查詢提示(recompile):
在查詢條件後面加上 OPTION(recompile)