是否有行数使表变量效率低下或什么?我了解两者之间的差异,并且我已经看到有关何时达到这一点的一些不同数字,但我很好奇是否有人知道。

最佳答案

当您需要表上的其他索引而不是可以在临时表变量上创建的索引时,或者对于较大的数据集(不太可能保留在可用内存中),当表宽度(每行的字节数)超过某个阈值(这是因为每个 I/O 页的数据数量或行数缩小并且性能下降……或者如果您计划对数据集进行的更改需要成为可能需要的多语句事务的一部分要回滚。(对表变量的更改不会写入事务日志,对临时表的更改是...)

此代码演示表变量未存储在事务日志中:

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

关于sql - 什么时候应该为临时表放弃表变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2921511/

10-12 14:17