表变量和临时表的区别
来源:互联网 发布:sqlserver 默认值 编辑:程序博客网 时间:2024/05/17 07:47
http://blog.csdn.net/lovehongyun/article/details/2031260
问题 1:为什么在已经有了临时表的情况下还要引入表变量?
解答 1:与临时表相比,表变量具有下列优点:
解答 2:下面的文章讨论了重新编译存储过程的一些原因:
243586 (http://support.microsoft.com/kb/243586/) 存储过程重新编译的疑难解答
“由于某些临时表操作引起的重新编译”一节还列出了为避免一些问题(例如使用临时表导致重新编译)而需要满足的一些要求。这些限制不适用于表变量。表变量完全独立于创建这些表变量的批,因此,当执行 CREATE 或 ALTER 语句时,不会发生“重新解析”,而在使用临时表时可能会发生“重新解析”。临时表需要此“重新解析”,以便从嵌套存储过程引用该表。表变量完全避免了此问题,因此存储过程可以使用已编译的计划,从而节省了处理存储过程的资源。
问题 3:表变量有哪些缺陷?
解答 3:与临时表相比,它存在下列缺陷:•在表变量上不能创建非聚集索引(为 PRIMARY 或 UNIQUE 约束创建的系统索引除外)。与具有非聚集索引的临时表相比,这可能会影响查询性能。•表变量不像临时表那样可以维护统计信息。在表变量上,不能通过自动创建或使用 CREATE STATISTICS 语句来创建统计信息。因此,在大表上进行复杂查询时,缺少统计信息可能会妨碍优化器确定查询的最佳计划,从而影响该查询的性能。•在初始 DECLARE 语句后不能更改表定义。•表变量不能在 INSERT EXEC 或 SELECT INTO 语句中使用。•表类型声明中的检查约束、默认值以及计算所得的列不能调用用户定义的函数。•如果表变量是在 EXEC 语句或 sp_executesql 存储过程外创建的,则不能使用 EXEC 语句或sp_executesql 存储过程来运行引用该表变量的动态 SQL Server 查询。由于表变量只能在它们的本地作用域中引用,因此 EXEC 语句和 sp_executesql 存储过程将在表变量的作用域之外。但是,您可以在 EXEC 语句或 sp_executesql 存储过程内创建表变量并执行所有处理,因为这样表变量本地作用域将位于 EXEC 语句或 sp_executesql 存储过程中。问题 4:与临时表或永久表相比,表变量的仅存在于内存中的结构保证了更好的性能,是否因为它们是在驻留在物理磁盘上的数据库中维护的?
解答 4:表变量不是仅存在于内存中的结构。由于表变量可能保留的数据较多,内存中容纳不下,因此它必须在磁盘上有一个位置来存储数据。与临时表类似,表变量是在 tempdb 数据库中创建的。如果有足够的内存,则表变量和临时表都在内存(数据缓存)中创建和处理。
问题 5:必须使用表变量来代替临时表吗?
解答 5:答案取决于以下三个因素:•插入到表中的行数。•从中保存查询的重新编译的次数。•查询类型及其对性能的指数和统计信息的依赖性。在某些情况下,可将一个具有临时表的存储过程拆分为多个较小的存储过程,以便在较小的单元上进行重新编译。
通常情况下,应尽量使用表变量,除非数据量非常大并且需要重复使用表。在这种情况下,可以在临时表上创建索引以提高查询性能。但是,各种方案可能互不相同。Microsoft 建议您做一个测试,来验证表变量对于特定的查询或存储过程是否比临时表更有效。
- 临时表和表变量的区别
- 临时表和表变量的区别
- 临时表和表变量的区别
- 表变量和临时表的区别
- 表变量和临时表的区别
- 表变量和临时表的区别
- 临时表和表变量的区别
- sqlserver 中临时表、临时变量和with as关键词创建“临时表”的区别
- 临时表与表变量的区别和使用方法
- SQL临时表和表变量的区别
- SQL Server中的临时表和表变量的区别
- 表变量和临时表自定义类型的区别
- SQL Server 表变量和临时表的区别
- 【转】SQL Server 表变量和临时表的区别
- 表变量与临时表的区别和联系
- sqlserver 表变量和临时表的区别
- SQL Server 表变量和临时表的区别
- SQL Server 表变量和临时表的区别
- 题目1207:质因数的个数
- Chrome Workspace
- oracle plsql 编程
- (Oracle 技能篇 ) Oracle 连接池实例代码(Java版本)
- Flash Builder 4的快捷方式和调试技巧
- 表变量和临时表的区别
- Apache2.2.2 访问站点的时候报403无权限显示的解决办法
- 调停者模式
- 我所认识的c语言
- 免费软件做的不错的,这里要说一个叫《飞秋》的软件
- DataSet DataTable DataRow
- 取得USB实例路径
- mysql错误集
- Eclipse 常用快捷键