2011-05-09 119 views
0

可能重複:
What's the difference between a temp table and table variable in SQL Server?SQL Server表變量VS臨時表

我使用表變量來存儲查詢的彙總結果。

查詢是如下

update @results 
set col1 = totals 
from (select sum(x) as totals from ......) 
where id = 1 

如果我使用的查詢運行得更快臨時表。

在上面的查詢中應該使用表變量還是臨時表?

我可以俯視嗎?

謝謝

+0

我不確定這是否與上述問題完全相同。鏈接中給出的帖子提到了關於記錄計數的性能差異。但在我的情況下,記錄計數似乎不是因素,因爲只有一個記錄正在更新 – user55474 2011-05-10 02:36:33

回答

1

這實際上取決於記錄的數量。表變量在較小的記錄集上執行得更好。這裏有一個很好的博客帖子,裏面有一些基準測試:http://sqlnerd.blogspot.com/2005/09/temp-tables-vs-table-variables.html

+0

但我這種情況下,我只更新一個記錄,即我的內部查詢的結果的聚合。 – user55474 2011-05-09 18:50:48

+0

表中有多少條記錄?問題可能不是更新,而是掃描表以找到要更新的記錄。 – 2011-05-09 18:52:42

+0

表變量只有3條記錄所以記錄的數量不是問題 – user55474 2011-05-09 18:58:16

0

表變量都很好,直到您獲得超過100個結果。如果您希望獲得100個或更多結果,則應該切換到臨時表以提高效率。

+2

爲什麼??如果臨時變量變得「太大」,它將被存儲到'tempDB'中 - 就像臨時表一樣。這裏沒有真正的巨大差異...... – 2011-05-09 18:51:55

+0

這是確定性的環境,如果內存可用,那麼SQL Server會將表移回內存。如果你不斷得到一個大的結果,它會在將內存存儲到性能成本的tempdb之前嚼碎內存。這可以通過使用臨時表開始以避免大的結果一起避免。 100個結果只是一個經驗法則,並非硬性要求。 – 2011-05-09 19:19:21