表变量与临时表的优缺点

什么情况下使用表变量?什么情况下使用临时表?

表变量:

DECLARE @tb  table(id   int   identity(1,1), name   varchar(100))   
  INSERT @tb

SELECT id, name 
  FROM mytable

WHERE name like ‘zhang%’

临时表:

SELECT name, address
  INTO #ta   FROM mytable  
  WHERE name like ‘zhang%’

表变量和临时表的比较:

  • 临时表是利用了硬盘(tempdb数据库) ,表名变量是占用内存,因此小数据量当然是内存中的表变量更快。当大数据量时,就不能用表变量了,太耗内存了。大数据量时适合用临时表。
  • 表变量缺省放在内存,速度快,所以在触发器,存储过程里如果数据量不大,应该用表变量。
  • 临时表缺省使用硬盘,一般来说速度比较慢,那是不是就不用临时表呢?也不是,在数据量比较大的时候,如果使用表变量,会把内存耗尽,然后使用 TEMPDB的空间,这样主要还是使用硬盘空间,但同时把内存基本耗尽,增加了内存调入调出的机会,反而降低速度。这种情况建议先给TEMPDB一次分配合适的空间,然后使用临时表。
  • 临时表相对而言表变量主要是多了I/O时间,但少了对内存资源的占用。数据量较大的时候,由于对内存资源的消耗较少,使用临时表比表变量有更好的性能。
  • 建议:触发器、自定义函数用表变量;存储过程看情况,大部分用表变量;特殊的应用,大数据量的场合用临时表。
  • 表变量有明确的作用域,在定义表变量的函数、存储过程或批处理结束时,会自动清除表变量。
  • 在存储过程中使用表变量与使用临时表相比,减少了存储过程的重新编译量。
  • 涉及表变量的事务只在表变量更新期间存在。这样就减少了表变量对锁定和记录资源的需求。
  • 表变量需要事先知道表结构,普通临时表,只在当前会话中可用与表变量相同into一下就可以了,方便;全局临时表:可在多个会话中使用存在于temp中需显示的drop。(不知道表结构情况下临时表方便一些)
  • 全局临时表的功能是表变量没法达到的。
  • 表变量不必删除,也就不会有命名冲突,临时表特别是全局临时表用的时候必须解决命名冲突。
  • 应避免频繁创建和删除临时表,减少系统表资源的消耗。
  • 在新建临时表时,如果一次性插入数据量很大,那么可以使用select into代替create table,避免log,提高速度;如果数据量不大,为了缓和系统表的资源,建议先create table,然后insert。
  • 如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,这样才能保证系统能够很好的使用到该临时表的索引。
  • 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table,然后drop table,这样可以避免系统表的较长时间锁定。
  • 慎用大的临时表与其他大表的连接查询和修改,减低系统表负担,因为这种操作会在一条语句中多次使用tempdb的系统表。

转载于:https://www.cnblogs.com/BrokenIce/p/5713238.html

表变量与临时表的优缺点相关推荐

  1. 表变量与临时表的优缺点?(ZT)

    什么情况下使用表变量?   什么情况下临时表?   ---------------------------------------------------------------     表变量只存放 ...

  2. 【译】表变量和临时表的比较(转)

    关于表变量是什么(和表变量不是什么),以及和临时表的比较让很多人非常困惑.虽然网上已经有了很多关于它们的文章,但我并没有发现一篇比较全面的.在本篇文章中,我们将探索表变量和临时表是什么(以及不是什么) ...

  3. T-SQL 之 表变量和临时表

    一.表变量 表变量在SQL Server 2000中首次被引入.表变量的具体定义包括列定义,列名,数据类型和约束.而在表变量中可以使用的约束包括主键约束,唯一约束,NULL约束和CHECK约束(外键约 ...

  4. SQL Server 表变量和临时表的区别

    一.表变量 表变量在SQL Server 2000中首次被引入.表变量的具体定义包括列定义,列名,数据类型和约束.而在表变量中可以使用的约束包括主键约束,唯一约束,NULL约束和CHECK约束(外键约 ...

  5. 【译】表变量和临时表的比较

    关于表变量是什么(和表变量不是什么),以及和临时表的比较让很多人非常困惑.虽然网上已经有了很多关于它们的文章,但我并没有发现一篇比较全面的.在本篇文章中,我们将探索表变量和临时表是什么(以及不是什么) ...

  6. mysql表变量临时表_表变量和临时表详解

    首先让我们来看看什么是表变量和临时表. sql server 表变量 1.初识表变量 表变量在sql server 2000中首次被引用.表变量的定义和创建一个表大致相同,只不过是使用DECLARE ...

  7. 表变量和临时表的使用

    表变量存储在内存中,而临时表存储在tempdb中,会涉及到物理IO读写,那么我们是否可以由此得出结论,使用表变量要比使用临时表效率高呢?相信有一部分人会和我有同样的想法,使用表变量的效率高,真是如此吗 ...

  8. SQL Server中临时表与表变量的区别

    我们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临时表及表变量.在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候 ...

  9. [导入]SQL中的临时表和表变量

    我们经常使用临时表和表变量,那现在我们就对临时表和表变量进行一下讨论. 临时表 局部临时表 全局临时表 表变量 临时表 临 时表存储在TempDB数据库中,所有的使用此SQL Server 实例的用户 ...

最新文章

  1. 微信小程序 bindtap 绑定事件
  2. html转移字符标签,使用标签对HTML特殊字符进行转义
  3. mysql-odbc的zip安装方法_win10环境下mysql-odbc的zip安装方法
  4. python数据结构之栈
  5. python37安装失败_Linux 安装Python37
  6. asterisk for mipsel
  7. 解决js array的key不为数字时获取长度的问题
  8. Deepin 添加PPA源问题
  9. 用python实现一个socket echo程序 tcp socket的几个关闭状态
  10. 跨平台客户端开发经验总结
  11. django 22、python3.4环境下新建django应用失败报错计算机中丢失python27.dll的解决方法
  12. 无线网络的暴力破解密码
  13. 阿里巴巴国际站关键字抓取工具
  14. 手机QQ聊天记录文件解密方法学习
  15. Vue项目(Ant Design of Vue)踩坑记之——表格header可伸缩
  16. A1059. 求解二元整数不定方程
  17. Echarts 柱状图调整 y 轴单位标题与图表之间的距离
  18. PreScan快速入门到精通第二十六讲PreScan中常用传感器之Beacon和OBU
  19. 广州大学计算机网络实验2,计算机网络实验一_
  20. 笔记:李想分享的创业经历的5个楼层

热门文章

  1. 剑指offer03-数组中重复的数字(java)|leetcode刷题
  2. spss数据预处理步骤_数据处理之剔除无效问卷
  3. 无插件HTML,HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)分享!
  4. numa节点_极致性能(1):以NUMA为起点
  5. 计算机网络cdma的缺点,CDMA和GSM比较的优缺点是什么?
  6. html判断安装没安装qq,QQ6.1体验版怎么用?腾讯QQ6.1体验版本安装步骤(无须申请体验账号)...
  7. 处于计算机学科的基础地位,谈谈离散数学在计算机学科中的地位和作用(原稿)...
  8. 以下哪个不是python财经数据接口工具_这7种Python的全新玩法,大部分人都不知道!...
  9. java 线程交替输出,[java]java经典问题之线程交替打印数字
  10. java自带的xml解析,使用Java自带SAX工具解析XML