參數嗅探導致SQL Server 預存程序效能下降
參數嗅探是SQL Server 使用的最佳化技術,透過選擇來提高查詢效能是基於首次編譯預存程序時的參數值的執行計劃。但是,在某些情況下,參數嗅探可能會導致效能問題。
考慮以下預存程序:
首次使用 @MyDate 為 NULL 執行此預存程序時,查詢最佳化器產生針對該特定參數值最佳化的執行計畫。但是,如果隨後使用不同的 @MyDate 值執行預存程序,則查詢最佳化器可能無法編譯最佳執行計劃,從而導致效能下降。
此問題稱為「參數嗅探變壞」 。在上面的例子中,即使@MyDate在預存程序中使用時實際上是NULL,基於初始編譯產生的糟糕的執行計劃仍然有效。
要解決這個問題,可以停用參數透過欺騙參數來嗅探:
這種方法建立輸入參數的副本,並使用該副本進行查詢最佳化過程,防止參數出現偏差
在SQL Server 2008 及更高版本中,可以使用OPTIMIZE FOR UNKNOWN提示來最佳化參數嗅探:
此提示指示查詢最佳化器根據未知產生執行計劃參數值,消除參數嗅探相關效能問題的風險。
以上是如何解決參數嗅探導致的SQL Server預存程序效能下降?的詳細內容。更多資訊請關注PHP中文網其他相關文章!