2011-11-06 82 views
1

新手問題臨時表和存儲過程編譯

,但我相信有很多的困惑仍然存在,因爲這種行爲SQL 2000和SQL 2005之間的SQL Server版本之間更改/晚。

SQL Server 2000 在存儲過程定義中有一個臨時表會強制它每次重新編譯它。所以沒有執行計劃存儲導致性能不佳。

SQL 2005及更高版本 即使您的proc定義中有臨時表,每次執行時都不會重新編譯。執行計劃將被重新分配。

+0

你的問題到底是什麼? [無論如何,你可能想閱讀這個](http://dba.stackexchange.com/questions/7477/optimization-moving-variable-declaration-to-top-of-procedure/7478#7478) –

+0

簡單地說,在存儲過程中有臨時表會迫使它在每次運行時重新編譯? –

+0

我的不好我剛剛在我的SQL 2008 R2 Express上測試過這個 sP中的臨時表不會重新編譯,並且計劃將被重新分配。 沒有SQL 2000所以不能測試,但任何人仍然有SQL2000可以證實這一點 –

回答

2

對於SQL 2000,您完全正確。對於SQL 2005,使用臨時表的語句將獨立於存儲過程進行編譯並進行緩存,以便它們可以重複使用。

請參閱Temporary Tables, Table Variables and Recompiles關於SQL可編程性& API開發團隊博客。滾動到以「當編譯存儲過程DemoProc1時插入和選擇查詢未編譯」開頭的部分。