[SQL] 參數探測

  • 2048
  • 0
  • SQL
  • 2016-09-02

[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)

 

3.使用查詢提示(OPTIMIZE FOR):

在查詢條件後面加上 OPTION (OPTIMIZE FRO ( @參數='值' ))

 

 END 

回目錄