2009-04-21 144 views
3

將某些臨時數據(一個50k行,另一個50k行)存儲以執行即將進行的計算會更有效。我會每晚做一次這個過程。SQL Server 2000臨時表與表變量

比較類似的東西時,你如何檢查效率?

回答

6

結果會因數據更容易存儲在磁盤(#temp)或內存(@temp)中而有所不同。

從下面引用

  • 一些摘錄臨時表是創建並填充磁盤上,在系統數據庫tempdb中。
  • 在內存中創建一個表變量,因此比#temp表執行得稍好一點(也因爲在表變量中鎖定和記錄的次數更少)。一個表變量仍然可以執行tempdb的I/O(這是#temp表的性能問題使它們變得明顯的地方),儘管文檔對此並不十分明確。
  • 與臨時表相比,表變量導致存儲過程的重新編譯更少。
  • [Y]您可以在臨時表上創建索引以提高查詢性能。

關於你與50,000列特定情況:

隨着數據規模變大,和/或臨時數據增加了重複使用,你會發現,使用#TEMP表使更有意義

參考文獻:

+0

以我的經驗50K將太多對於表var,但我沒有硬數據來支持。我通常會嘗試保持桌面變量小於5K。 – brendan 2009-04-21 19:39:06

+3

您可以在#表格上創建附加索引,而不能在增值表上創建。 – Joe 2009-04-21 19:47:31

3

可以有使用表變量和臨時表之間有很大的性能差異。在大多數情況下,臨時表比表變量快。我從私有SQL Server MVP新聞組中收到以下提示,並獲得Microsoft的許可與您分享。一個MVP注意到,儘管使用表變量的查詢並未在大型SMP框中生成並行查詢計劃,但使用臨時表(本地或全局)並在相同情況下運行的類似查詢確實會生成並行計劃。

更多來自SQL Mag(不幸的是需要的捐款,我會試着找到暫時更多的資源)

編輯:下面是一些更深入的信息從CodeProject