由於參數嗅探導致預存程序效能較差
您遇到了儲存過程的效能問題,其中輸入參數(@MyDate)可以是NULL 或日期。當過程首次使用 @MyDate 為 NULL 進行編譯時,無論實際參數值為何,後續執行都會表現出較差的效能。
參數嗅探行為
SQL Server 執行「參數嗅探」以在編譯期間根據參數值最佳化執行計畫。它捕獲過程快取中的這些值並使用它們來估計未來的執行。
在這種情況下,參數嗅探會導致問題,因為當 @MyDate 最初為 NULL 時,它會為所有參數值產生次優執行計劃。即使在執行時將 @MyDate 明確設定為 NULL,快取的計劃仍然保留。
禁用參數嗅探
您遇到了“參數嗅探”的典型症狀變壞了”,其中為初始參數值生成的計劃即使不代表實際執行也會被使用。欺騙參數。您可以透過使用OPTIMIZE FOR UNKNOWN選項來緩解此問題,該選項強制優化器在計劃編譯期間考慮參數的所有可能值。 >
影響計畫的謂詞是可以導致計畫的複雜表達式變更。 OPTIMIZE FOR UNKNOWN 可以強制最佳化器考慮所有參數值。文件有關參數嗅探行為的更多詳細資訊和更新。
以上是如何解決SQL Server參數嗅探導致預存程序效能不佳的問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!