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;
综上:临时表适用于数据量较大的场合,表变量适用于数据量较小的场合。