临时表 和 表变量
一、临时表 #
临时表存储在tempdb数据库中,因此临时表的访问是有可能造成物理IO。
当然在修改时也需要生成日志来确保一致性,同时锁机制也是不可缺少的。
临时表可以创建索引,也可以定义统计数据。
二、表变量 @
表变量存放在内存中,正是这点,所有用户访问表变量的时候SQL Server是不需要生成(事务)日志的。
同时表变量是不需要考虑其他会话访问的问题。因此也不需要锁机制。
对于非常繁忙的系统来说,避免锁机制的使用可以减少一部分系统的负载。
表变量会更少的存储过程重编译。
表变量存放在内存是有一定限制的,如果表变量数据量超过临界值的话会把内存耗尽。
然后使用tempdb空间,这样主要还是使用硬盘空间,但同时把内存基本耗尽,增加了内存调入调出的机会,反而降低速度。
表变量另外还有一个限制:就是不能创建索引,也不存在统计数据的问题。
临时表 vs 表变量
1、存储位置
临时表是利用了硬盘tempdb数据库
表变量是占用内存,因此小数据量是内存中的表变量速度更快。
当大数据量时,就不能用表变量了,太消耗内存了。大数据库时适合临时表。
2、性能
表变量存储数据有个性能临界点。
在这个临界点内,使用表变量比使用临时表要快。表变量书存储在内存中的。
3、索引
表变量不支持索引和统计数据,但可以有主键。
临时表则可以支持索引和统计数据。
使用表变量另外一个因素是:
应用环境内存的压力,如果代码的运行实例很多,就要特别注意内存变量对内存的消耗。
一般对于大的数据集,我们最好使用临时表,同时创建索引。

浙公网安备 33010602011771号