我在SQL Server 2008 R2中有一個存儲過程,它根據傳入的一些參數值來查詢非常大的單個表&。我無法控制模式。存儲過程計劃優化
大多數情況下,存儲過程執行得非常好,但偶爾它似乎會編譯一個真正不好的執行計劃(我的猜測是一個表掃描 - 這將是這張表的堅果)。
什麼是優化存儲過程以避免這種情況的最佳方法?我目前正試圖OPTIMIZE FOR
&使用一些合理的參數值
不過,我想我可能是USE PLAN
&更好正義的力量,我知道作品以及執行計劃(沒有JOIN
S,只是3項指標上表格和表格大小非常一致(BIG!),所以我認爲這個計劃不應該真的需要改變)。
任何人都有過這種事情的經驗?什麼效果最好?
我通常首先檢查參數嗅探。我花了幾個小時重構查詢,只是發現使用局部變量而不是參數變量可能已經修復了它。我不知道它是否會幫助你,所以這不是一個答案,但這是一個體面的鏈接:http://blogs.technet.com/b/mdegre/archive/2012/03/19/what-is- parameter-sniffing.aspx – Malk
你有沒有試過在SSMS中查看執行計劃?它可能會給你一個視覺上哪個表導致性能受到影響。 –
您是否檢查過以確保您的統計信息是最新的?這可能是一個問題,如果有很多的UPDATE/INSERT/DELETE活動 – JohnFx