我有一個問題:比方說,我有一個程序包含過程定義內的動態SQL,所以當我第一次執行過程時,很明顯它編譯過程並存儲計劃第一次。SQL Server過程重新編譯
第二次運行過程中會發生什麼?將使用相同的計劃,還是程序將進行重新編譯,因爲它包含動態SQL?
我有一個問題:比方說,我有一個程序包含過程定義內的動態SQL,所以當我第一次執行過程時,很明顯它編譯過程並存儲計劃第一次。SQL Server過程重新編譯
第二次運行過程中會發生什麼?將使用相同的計劃,還是程序將進行重新編譯,因爲它包含動態SQL?
Stack Exchange for Database Administrators中已經回答了類似的問題。請參閱:https://dba.stackexchange.com/questions/47283/when-does-sp-executesql-refresh-the-query-plan
動態SQL始終被編譯。它可能導致與第一次運行相同的執行計劃(完全依賴於參數)。
我建議您讀一讀來自MS的this article。相關報價:
重新編譯:定義
查詢,批處理,存儲過程,觸發器,準備的發言之前,或動態SQL語句(以下簡稱,「批量」)開始執行一個SQL Server上,批被編譯成一個計劃。該計劃然後執行其效果或產生結果。
和
編譯計劃存儲到SQL Server的內存稱爲計劃緩存的一部分。計劃緩存被搜索可能的計劃重用機會。如果一個批次的計劃重用發生,它的編譯成本就可以避免。
感謝您的詳細信息 –
@AdarshHDDev,如果有用,請接受或提出答案。 –
嗨巴拉,我已經投票了答案,因爲我是新的,我的名聲低於15.投票未公開:( –