表变量:

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/lxshanye/archive/2013/03/21/2972466.html

局部临时表 全局临时表 表变量相关推荐

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

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

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

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

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

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

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

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

  5. SqlServer 中的临时表与表变量

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

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

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

  7. php sql server临时表,SQLServer中临时表与表变量的区别分析

    在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永 ...

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

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

  9. sql 表变量 临时表_何时使用SQL临时表与表变量

    sql 表变量 临时表 It is very beneficial to store data in SQL Server temp tables rather than manipulate or ...

最新文章

  1. python 自动化微信小程序_appium+python自动化56-微信小程序自动化(摩拜为例)
  2. C++知识点3——const基础
  3. python3 pycharm 远程调试 启动报错 ValueError: source code string cannot contain null bytes
  4. mysql并发提交事务_Mysql事务并发问题解决方案
  5. centOS上安装redis
  6. 实现Evernote的OAuth授权
  7. C++11线程管理基础
  8. 【JavaScript高级教程】JavaScript prototype(原型对象)
  9. 网络请求数据解析时,判断数据是否为空
  10. 邀请和建议的回答_46
  11. 计算机在机械工程中的应用英语作文,机械英语论文范文
  12. 「 运动控制 」“ADRC自抗扰控制技术”(Active Disturbance Rejection Control)研究
  13. 【最新面试】2022年软件测试面试题大全(持续更新)附答案
  14. OneZero第二周第三次站立会议(2016.3.30)
  15. 简体中文转换为繁体中文
  16. 从春招到秋招,算法工程师养成记
  17. ant design vue日期组件怎么清空(a-range-picker,a-date-picker)
  18. GNU/Linux闲话
  19. java坦克大战(2.0)
  20. MDF和DHF、DMR、DHR三者差异?注册与备案文件?

热门文章

  1. 华为P10的内存门和闪存门的检测方法
  2. IntelliJ IDEA 安装本地插件
  3. apache环境下web站点禁止用服务器ip访问
  4. X86Windows 相关链接....持续更新中....
  5. Android Scroller的使用及自我理解
  6. Asp.net MVC3 Razor语法小记
  7. 《C++ Primer》读书笔记
  8. 谨防 ActiveSupport::Cache::Store 缓存 nil 值
  9. cacti安装的一个错误
  10. 进军SharePoint,资料先行....