Sql-Server

在 sql 查詢中使用 OPTIMIZE FOR 提示

  • April 28, 2015

據我所知,OPTIMIZE FOR 提示有助於避免參數嗅探。

對於這樣的儲存過程:

SELECT * FROM Tabele WHERE param=@param1

我們有兩個S1具有高選擇性和s2低選擇性的參數。

如果我們使用這樣的提示:

OPTION(OPTIMIZE FOR @param1=s1)

然後發送s2到儲存過程,我們還有參數嗅探。

現在我有一個概念性問題!:

OPTIMZE FOR 提示如何真正幫助我們避免參數嗅探?

OPTIMIZE FOR用於為特定查詢制定良好的計劃。一個典型的例子是經常使用相同參數執行的傾斜數據的報告。在這種情況下,優化最常見參數的查詢可能很有用。這是一個權衡,因為具有不同參數的其他查詢會使計劃變得更糟。

如果您遭受參數嗅探的困擾,您可以使用OPTIMIZE FOR UNKNOWN,OPTION RECOMPILE或局部變數。這些都不是靈丹妙藥,因此請仔細對查詢進行基準測試。確保問題確實是參數嗅探,而不是過時的統計資訊。

Microsoft部落格使用範常式式碼討論了該問題,作為dba.so 上的一個問題。

引用自:https://dba.stackexchange.com/questions/99016