`
yajie
  • 浏览: 211488 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

表变量与临时表的优缺点

阅读更多

表变量与临时表的优缺点

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

表变量:  

  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的系统表。
分享到:
评论

相关推荐

    使用表变量而不是游标变量

    5. **减少数据库锁定**:与临时表相比,表变量通常产生较少的锁定,减少了并发问题。 然而,表变量也有其局限性,如: 1. **数据量限制**:如果表变量需要存储大量数据,可能会超出内存限制,导致性能下降。 2. **...

    SQL Server如何通过创建临时表遍历更新数据详解

    在这个循环内部,首先设置一个计数器`@Num`,然后每次循环都从临时表中选取第一条记录,将ID和Name赋值给对应的变量。接着,可以执行更新操作,比如`UPDATE TalkingSkillType SET Sort=@ID WHERE id=@ID`,将Sort列...

    关于sqlserver 2005 使用临时表的问题( Invalid object name #temptb)

    使用表变量代替临时表,这样做法可以避免SSRS 2005 的语法错误提示,缺点就是如果处理的数据量比较大,会占用过大的内存,并且报表加载时间过长。 2.使用一个不包含临时表的SQL语句创建报表,创建成功以后,修改...

    SQL Server遍历表中记录的2种方法(使用表变量和游标)

    表变量类似于临时表,但其作用范围仅限于当前批处理或存储过程。下面是一个使用表变量的例子: ```sql DECLARE @temp TABLE ( [id] INT IDENTITY(1, 1), [Name] VARCHAR(10) ) DECLARE @tempId INT, @tempName ...

    第25篇-QTP数据表Global与Local

    在软件测试领域,QuickTest Professional(QTP)是一款广...以上就是关于QTP中的数据表Global与Local的详细解析,理解并熟练运用它们,可以帮助我们编写出更高效、更灵活的自动化测试脚本,提升软件测试的效率和质量。

    SQL语句删除重复记录

    缺点:需要创建两个临时表,可能会占用更多的存储空间。 Knowledge Point 2: 使用游标删除重复记录 在这种方法中,我们使用游标来遍历重复记录,并将其删除。使用 declare 语句声明变量,并使用游标来 fetch 记录...

    SQL Server删除重复数据的几个方法

    ### SQL Server删除重复数据的方法 在数据库管理过程中,经常会...以上三种方法各有优缺点,可以根据实际情况选择最适合的方法来删除SQL Server中的重复数据。需要注意的是,在操作前最好备份数据以防意外情况发生。

    链表和顺序表的删除有序,删除最小,合并,倒置,交换

    它们各有优缺点,适用于不同的场景。在处理数据操作时,如删除有序元素、删除最小元素、合并、倒置和交换等,需要理解这两种数据结构的特点并掌握相应的操作方法。 1. **链表** - 链表是一种动态数据结构,节点...

    MySQL数据库的临时文件究竟储存在哪里

    然而,如果你的MySQL服务器正在运行复制服务作为从服务器,不建议将`--tmpdir`设置为内存文件系统或者重启后会被清空的目录,因为这样可能导致复制过程中临时表或LOAD DATA INFILE操作的数据丢失,从而影响复制的...

    数据库面试题

    根据给定文件的信息,本文将围绕“数据库面试题”这一主题展开,重点解析与数据库相关的技术知识点,包括但不限于如何在存储过程中使用临时表、存储过程的编写方式、Oracle表分区的概念及其优缺点等内容。...

    sap abap找表的18种方法

    17. **ABAP Debugger**:在调试过程中,可以检查变量和临时表,从而找到数据来源。 18. **ABAP Test Cockpit (ATC)**:虽然主要用作代码质量检查工具,但在分析ABAP代码时,也能帮助识别使用的数据库表。 这些方法...

    GridView自定义分页的四种存储过程 学习心得

    3. 使用临时表变量:与临时表类似,但使用表变量可以在同一个连接中多次调用存储过程,避免了临时表的生命周期问题: ```sql CREATE PROCEDURE GetProductsByPage @PageNumber int, @PageSize int AS BEGIN ...

    GridView自定义分页的四种存储过程

    3. **使用临时表变量**:与临时表类似,但使用的是表变量,这在并发环境中可能更安全,因为它不会被其他会话访问。 ```sql DECLARE @TempProducts TABLE (ID INT IDENTITY PRIMARY KEY, ProductID INT, ...) ...

    PL/SQL 基础.doc

    表示变量具有与数据库的表中某一字段相同的类型 例:v_FirstName s_emp.first_name%TYPE; 3. RECORD类型 TYPE t_emp IS RECORD( /*其中TYPE,IS,RECORD为关键字,record_name为变量名称*/ field1 type [NOT...

    Oracle查询优化改写技巧与案例.rar

    - 子查询可能导致多次表扫描,考虑是否可以转换为连接查询或者使用表变量、临时表来提高性能。 5. **使用绑定变量** - 绑定变量能避免硬解析,提高SQL语句的复用率。尽量避免在SQL语句中使用常量,改为使用绑定...

    链表的简单排序

    在这个示例中,我们使用了一个临时变量 `h` 来存储链表的头节点,并使用 `p` 变量来遍历链表。 链表的遍历是通过 `out()` 函数实现的,该函数将链表中的每个节点的信息输出到屏幕上。在这个示例中,我们使用 `cout`...

    数据库和ado知识

    数据库语言 数据库的简易流程(数据库客户端软件和数据库服务软件的执行流程) ...三层结构的优缺点 邮件发送方法 Excel导入导出 MD5加密解密方法 读取数据库后,判断dataset里列的值是否为空 项目术语

    线性结构 ADT表的操作

    - **程序设计语言编译**:在编译器中管理符号表、临时变量等。 - **数据库系统**:用于组织和查询数据。 - **操作系统调度**:用于任务管理和资源分配。 #### 结论 线性结构作为一种基础的抽象数据类型,为更复杂...

    SQL Server 2000完结篇系列之八:SQL Server 2000过程优化详解

    5. **临时表和表变量**:临时表和表变量在处理大量数据时有各自的优缺点。根据场景选择合适的方式,可以改善处理性能。 6. **游标与批处理**:尽量避免使用游标,因为它们通常比批处理操作慢。如果必须使用,理解...

Global site tag (gtag.js) - Google Analytics