临时表 和 表变量

一、临时表 #

临时表存储在tempdb数据库中,因此临时表的访问是有可能造成物理IO。

当然在修改时也需要生成日志来确保一致性,同时锁机制也是不可缺少的。

临时表可以创建索引,也可以定义统计数据。

 

二、表变量 @

表变量存放在内存中,正是这点,所有用户访问表变量的时候SQL Server是不需要生成(事务)日志的。

同时表变量是不需要考虑其他会话访问的问题。因此也不需要锁机制。

对于非常繁忙的系统来说,避免锁机制的使用可以减少一部分系统的负载。

表变量会更少的存储过程重编译。

 

表变量存放在内存是有一定限制的,如果表变量数据量超过临界值的话会把内存耗尽。

然后使用tempdb空间,这样主要还是使用硬盘空间,但同时把内存基本耗尽,增加了内存调入调出的机会,反而降低速度。

 

表变量另外还有一个限制:就是不能创建索引,也不存在统计数据的问题。

 

 

临时表 vs 表变量

1、存储位置

临时表是利用了硬盘tempdb数据库

表变量是占用内存,因此小数据量是内存中的表变量速度更快。

当大数据量时,就不能用表变量了,太消耗内存了。大数据库时适合临时表。

 

2、性能

表变量存储数据有个性能临界点。

在这个临界点内,使用表变量比使用临时表要快。表变量书存储在内存中的。

 

3、索引

表变量不支持索引和统计数据,但可以有主键。

临时表则可以支持索引和统计数据。

 

 

使用表变量另外一个因素是:

应用环境内存的压力,如果代码的运行实例很多,就要特别注意内存变量对内存的消耗。

一般对于大的数据集,我们最好使用临时表,同时创建索引。

 

posted @ 2016-09-11 16:15  茗::流  阅读(165)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。