摘要:[SQL SERVER] 什麼是參數探測 (Parameter Sniffing)
一般來說Stored procedure在第一次執行時,會把compile好的plan丟到plan cache裡面
下一次執行時,會從cache裡面取出,再次使用,讓資料庫減少compile的動作
這時候就會出現參數探測(parameter sniffing)這種潛在問題
因為可能因為參數的差異導致結果集差異過大,而非最佳化的效率
例如:
某一stored procedure可能是查詢訂單細目資訊,而參數為日期
平時只會執行當日一天的結果,但是如果查詢為數年的結果
可能因為使用了一日結果的plan,導致效率很差
解決方式
- OPTION (RECOMPILE)
- OPTION (OPTIMIZE FOR (@VARIABLE=VALUE))
- OPTION (OPTIMIZE FOR (@VARIABLE UNKNOWN))
- Use local variables
寫到一半..............晚點補充