0
在SQL Server中的存儲過程中,何時生成實際的SQL查詢計劃?當SQL第一次運行或存儲過程被編譯時?任何想法與Oracle相比,查詢計劃的生成有多昂貴?什麼時候執行計劃在SQL Server中生成?
在SQL Server中的存儲過程中,何時生成實際的SQL查詢計劃?當SQL第一次運行或存儲過程被編譯時?任何想法與Oracle相比,查詢計劃的生成有多昂貴?什麼時候執行計劃在SQL Server中生成?
當查詢運行時,SQL Server將檢查執行計劃緩存中是否存在該查詢的執行計劃。如果它找到一個,它可以重用該執行計劃。如果在緩存中找不到一個,它將生成一個計劃,放入緩存以便後續調用重用,然後執行查詢。所以它在查詢執行時執行此操作。
計劃多長時間停留在緩存下降到許多因素,其中包括:
- 如何常常是計劃用於
- 多少「價值」這一計劃提供
- 在內存壓力服務器
因此,給定的查詢可能會有一個執行計劃在給定期間內多次生成,如果它的計劃沒有管理保留在緩存中。此外,當SQL Server重新啓動時,緩存被清除。
多數民衆贊成罰款良好的MSDN文章,但你可以在存儲過程(不是隨機的TSQL查詢)的任擇議定書要求擴大? – 2011-02-23 07:53:57
@astander - 通過「查詢」,我包括adhoc tsql語句/參數化的tsql語句/存儲過程所有 - 我不覺得有什麼理由在這裏區分 – AdaTheDev 2011-02-23 07:57:22
我認爲你應該。存儲過程不同於即席查詢。保存的執行計劃/強制重新編譯/參數嗅探只是爲了提一下我的頭頂...... – 2011-02-23 08:12:07