SQL Server中的临时表和表变量有什么区别?

  • 回答 (2)
  • 关注 (0)
  • 查看 (196)

在SQL Server 2005中,我们可以通过两种方式创建临时表:

declare @tmp table (Col1 int, Col2 int);

要么

create table #tmp (Col1 int, Col2 int);

这两者有什么区别?对于@tmp是否仍然使用tempdb,或者内存中是否发生任何事情,我都读过了相互冲突的意见。

在哪种情况下,一个表现优于另一个?

想念o默默想念o默默提问于
akjok54stay hungry stay foolish回答于

临时表:临时表很容易创建和备份数据。

表变量:但是表变量涉及通常创建正常表时的努力。

临时表:临时表结果可以被多个用户使用。

表变量:但是表变量只能被当前用户使用。

临时表:临时表将被存储在tempdb中。它会使网络流量。当我们在临时表中有大量数据时,它必须在数据库上工作。性能问题将存在。

表变量:但是一个表变量将存储在物理内存中的一些数据,然后当大小增加后,它将被移动到tempdb。

临时表:临时表可以完成所有的DDL操作。它允许创建索引,丢弃,修改等。

表变量:表变量不允许执行DDL操作。但是table变量只允许我们创建聚集索引。

临时表:临时表可用于当前会话或全局。这样一个多用户会话可以利用表中的结果。

表变量:但是表变量可以用于该程序。(存储过程)

临时表:临时变量不能使用事务。当我们使用临时表执行DML操作时,可以回滚或提交事务。

表变量:但是我们不能做表变量。

临时表:函数不能使用临时变量。更多的是,我们不能在功能上做DML操作。

表变量:但是该函数允许我们使用表变量。但是使用表变量我们可以做到这一点。

临时表:当我们对每个后续调用使用临时变量时,存储过程将执行重新编译(不能使用相同的执行计划)。

表变量:而表变量不会这样做。

人生的旅途辣鸡前端回答于

在哪种情况下,一个表现优于另一个?

对于较小的表(少于1000行)使用临时变量,否则使用临时表。

扫码关注云+社区

领取腾讯云代金券