0

有人可以解釋爲什麼這會起作用。這是scenerio。我有一個存儲過程,它開始運行緩慢。然後我選擇一個參數並聲明一個變量來存放它的值,並在proc中使用聲明的變量而不是參數。這個過程將會大大加快。在SQL Server 2005中解決緩存計劃

我認爲這與緩存的計劃和統計數據有關,但我不確定。它是否隨着數據庫的增長和更改而變得過時,以便緩存計劃針對與當前數據狀態不同的過去數據狀態進行優化?

謝謝。

回答

4

你描述的通常被稱爲parameter sniffing,它似乎是一個SQL Server唯一的問題 - 從來沒有在Oracle IME上,也不知道MySQL的問題。我給出的鏈接很好地解決了這個問題。

請注意,優化程序使用的統計信息不會與數據更改同步 - 您可能還需要偶爾運行UPDATE STATISTICS

+0

OMG - 謝謝你的回答,你的鏈接給了我正在尋找的解釋。 – MikeMalter 2010-07-30 03:51:28

0

當您更改ddl時,將從緩存中刪除存儲過程執行計劃,但由於OMG Ponies說優化程序不會跟蹤數據更改。

解決此問題的一種方法是使用With Recompile選項,並且每次運行該過程時都會編譯該過程。另一個可能的解決方案是定期運行sp_recompile,它將存儲過程標記爲重新編譯。

+0

IIRC重新編譯也拋出了查詢計劃,保證硬解析 – 2010-07-29 17:30:57

+0

Giorgi,感謝您花時間回覆我的問題。 – MikeMalter 2010-07-30 03:51:58