表变量与SQL Server 2008中的临时表

时间:2010-10-07 04:49:41

标签: sql sql-server-2008

  

可能重复:
  What's the difference between a temp table and table variable in SQL Server?

表变量和临时表有什么区别,实际上我有两个问题。

  • 如何决定何时使用?
  • 哪一个表现更好?为什么?

2 个答案:

答案 0 :(得分:2)

第一个区别是没有为表变量记录事务日志。因此,它们超出了交易机制的范围,从这个例子中可以清楚地看到:

create table #T (s varchar(128)) 
declare @T table (s varchar(128)) 
insert into #T select 'old value #' 
insert into @T select 'old value @' 
begin transaction 
     update #T set s='new value #' 
     update @T set s='new value @' 
rollback transaction 
select * from #T 
select * from @T 

了解详情:http://www.sql-server-performance.com/articles/per/temp_tables_vs_variables_p1.aspx

答案 1 :(得分:1)

表变量在内存中分配,只有当表变大时,它才会被分配给tempdb。

在临时表上,您可以按照普通表创建索引,因为这些是按照定义在tempdb中创建的。

所以我建议你对要存储的数字行做出这个决定......