2011-02-23 77 views

回答

3

當查詢運行時,SQL Server將檢查執行計劃緩存中是否存在該查詢的執行計劃。如果它找到一個,它可以重用該執行計劃。如果在緩存中找不到一個,它將生成一個計劃,放入緩存以便後續調用重用,然後執行查詢。所以它在查詢執行時執行此操作。

計劃多長時間停留在緩存下降到許多因素,其中包括:
- 如何常常是計劃用於
- 多少「價值」這一計劃提供
- 在內存壓力服務器

因此,給定的查詢可能會有一個執行計劃在給定期間內多次生成,如果它的計劃沒有管理保留在緩存中。此外,當SQL Server重新啓動時,緩存被清除。

有上Execution Plan Caching and Reuse

+0

多數民衆贊成罰款良好的MSDN文章,但你可以在存儲過程(不是隨機的TSQL查詢)的任擇議定書要求擴大? – 2011-02-23 07:53:57

+0

@astander - 通過「查詢」,我包括adhoc tsql語句/參數化的tsql語句/存儲過程所有 - 我不覺得有什麼理由在這裏區分 – AdaTheDev 2011-02-23 07:57:22

+0

我認爲你應該。存儲過程不同於即席查詢。保存的執行計劃/強制重新編譯/參數嗅探只是爲了提一下我的頭頂...... – 2011-02-23 08:12:07