SQLServer表变量和临时表的区别

SQLServer表变量和临时表创建时都存储在内存中,直到他们的size达到指定大小后才会被保存到disk。

他们的区别如下(补充中):

1. 临时表有统计,表变量没有统计;

2. 临时表有可能引起recompile(多数场合是因为Schema Changed或者Statistics Changed),表变量不会引起基于统计变更的recompile;

3. 表变量有它自己的作用域(例如在SP中声明的表变量,无法被该SP嵌套调用的子SP使用,而临时表可以);

4. 表变量不受transaction rollbacks的影响,所有对表变量的操作都会在独立的transaction中立即commit;

5. 无法对表变量创建index除非对它指定constraints (primary key and unique key),DDL无法应用到表变量,而临时表可以创建non key index;

6. 编译时对表变量的行数估算总是0或1;

综上:临时表适用于数据量较大的场合,表变量适用于数据量较小的场合。

参照:http://blogs.msdn.com/b/sqlprogrammability/archive/2007/01/18/11-0-temporary-tables-table-variables-and-recompiles.aspx

posted @ 2012-10-23 11:46  RoyLiu  阅读(518)  评论(0编辑  收藏  举报