2013-04-12 41 views

回答

0

存儲過程體存儲在系統表中。 計劃在每次執行時都被緩存和重用,雖然是的,但首先必須在首次執行時創建。

1

執行計劃是在第一次存儲過程爲運行時創建的 - 並且它存儲在(易失性)計劃緩存中。

如果服務器太忙併且需要空間來存放要緩存的最新執行計劃,或者SQL Server服務已關閉,那麼該緩存將消失,並且下次執行時需要解析該過程,並且執行計劃再次確定。

只需通過創建存儲過程,你是不是存儲任何執行計劃 - 存儲過程並不預編譯之類的東西,因爲民間傳說往往聲稱。那根本就不是這樣。

事實上,在創建存儲過程時,SQL Server甚至不檢查對象是否存在。你可以完全創建一個從不存在的表中選擇的存儲過程 - 它將被創建得很好。該錯誤只發生在運行時 - 一旦執行計劃嘗試第一次構建(當然,當然,表不存在的事實將導致錯誤)

+0

還有WITH REPOMPILE選項,每次SP運行時都會強制重新創建執行計劃。 – Artemix