參數嗅探與預存程序執行計畫效能
當@MyDate 為NULL 執行時,預存程序會遇到效能問題,即使產生的執行計劃不是最優的。無論 @MyDate 實際上是 NULL 還是透過 IF 語句設定為目前時間戳,此問題仍然存在。
有問題的執行計劃被認為是由參數嗅探引起的,其中 SQL Server 根據參數嗅探來編譯預存程序編譯時提供的參數值。但是,在這種情況下,即使參數為 NULL,也會出現問題,這與典型的參數嗅探場景相矛盾。
透過欺騙參數 (@MyDate_Copy) 來停用參數嗅探可以解決此問題。這表示伺服器正在使用基於任意 NULL 值的錯誤執行計劃。
洞察現象
根據接受的答案,在 SQL 中進行參數嗅探眾所周知,Server 2005 存在可能導致執行計劃不佳的問題。據推測,即使參數為 NULL,伺服器也會根據不具代表性的參數值產生無效的計劃。此外,還發現了 LEFT JOIN 和 NULL 的問題,透過將它們替換為 NOT IN 或 NOT EXISTS 解決了這些問題。
解決方案
對於 SQL Server 2008,可以使用「針對未知進行最佳化」選項來緩解此問題。
以上是為什麼我的預存程序即使使用 NULL 參數也會出現效能問題,如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!