2011-05-09 115 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