sql存儲過程執行計劃優化:參數嗅探及其影響及其影響
在提到的情況下,即使使用的值為null,也為@MyDate生成的執行計劃也很差。此行為是不尋常的,並且暗示了參數嗅探的問題。 solufce:禁用參數sniffing
一個解決方案是通過使用參數變量來禁用參數sniffing: @mydate dateTime = null 作為 聲明@MyDate_Copy DateTime 設置@mydate_copy = @mydate 如果@mydate_copy為null SET @mydate_copy = current_timestamp - 使用@mydate_copy
對問題的洞察SQL Server 2005中的基本問題是一個已知問題,在某些補丁級別中參數嗅探是一個已知的問題。 In SQL Server 2008, the OPTIMIZE FOR UNKNOWN clause can be used to resolve such issues.
CREATE PROCEDURE MyProc @MyDate DATETIME = NULL AS IF @MyDate IS NULL SET @MyDate = CURRENT_TIMESTAMP -- Do Something using @MyDateAdditional Considerations
To further improve performance when using stored procedures with input parameters, it is recommended to:
Use parameterized queries to ensure the database optimizes the execution plan有效。避免使用空值作為輸入參數,因為它們可能會觸發意外的優化問題。
監視存儲過程的性能並根據需要調整執行計劃。免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3