表变量与临时表的优缺点?

转载 2004年09月07日 11:26:00
什么情况下使用表变量?  
什么情况下临时表?  
---------------------------------------------------------------  
 
表变量只存放在内存中,临时表需要写磁盘。所以一般情况下,用表变量会快些。  
 
用法不太一样,有些时候用表变量更方便。  
 
具体的再看SQL  2000的帮助。试用下就知道了。  
---------------------------------------------------------------  
 
个人观点:  
1、表变量缺省放在内存,速度快,所以在触发器,存储过程里如果数据量不大,应该用表变量。  
2、临时表缺省使用硬盘,一般来说速度比较慢,那是不是就不用临时表呢?也不是,在数据量比较大的时候,如果使用表变量,会把内存耗尽,然后使用TEMPDB的空间,这样主要还是使用硬盘空间,但同时把内存基本耗尽,增加了内存调入调出的机会,反而降低速度。这种情况建议先给TEMPDB一次分配合适的空间,然后使用临时表。  
 
 
 
---------------------------------------------------------------  
 
肤浅理解:  
       表变量:需要事先知道表结构  
       普通临时表:只在当前会话中可用与表变量相同  into一下就可以了,方便  
       全局临时表:可在多个会话中使用存在于temp中需显示的drop  
---------------------------------------------------------------  
 
要从表变量的作用域,支持不支持的操作,机器内存大小等几方面考虑。  
如:  
.表变量相当于ADO的RECORDSET,速度比临时表快得多。  
表变量不能用在下列语句中:  
INSERT  INTO  table_variable  EXEC  存储过程。  
SELECT  select_list  INTO  table_variable  语句。  
在定义  table  变量的函数、存储过程或批处理结束时,自动清除  table  变量。  
但临时表支持。  
.表变量速度比临时表快得多(如果内存足够)  
如果数据量不大:  
微软  BOOK  ON  LINE  内说:尽可能使用表变量而不使用临时表  
---------------------------------------------------------------  
 
贴出来看看:  
 
尽可能使用表变量而不使用临时表。table  变量有以下优点:    
 
table  变量的行为类似于局部变量,有明确定义的作用域。该作用域为声明该变量的函数、存储过程或批处理。    
在其作用域内,table  变量可像常规表那样使用。该变量可应用于  SELECT、INSERT、UPDATE  和  DELETE  语句中用到表或表的表达式的地方。但是,table  不能用在下列语句中:  
 
INSERT  INTO  table_variable  EXEC  存储过程。  
 
SELECT  select_list  INTO  table_variable  语句。  
 
在定义  table  变量的函数、存储过程或批处理结束时,自动清除  table  变量。  
 
在存储过程中使用表变量与使用临时表相比,减少了存储过程的重新编译量。  
 
 
涉及表变量的事务只在表变量更新期间存在。这样就减少了表变量对锁定和记录资源的需求。    
不支持在表变量之间进行赋值操作。另外,由于表变量作用域有限,并且不是持久数据库的一部分,因而不受事务回滚的影响。  
 
---------------------------------------------------------------  
 
个人认为:  
1.表变量在内存中,临时表存放在硬盘上;  
2.用临时表要考虑锁不锁表的问题;  
3.数据量太大应该用临时表。

比较表变量和临时表

1、回滚事务对表变量无效,回滚事务对临时表有效SET NOCOUNT ON; DECLARE @TestTable TABLE ( RowID INT IDENTITY PRIMARY KE...
  • roy_88
  • roy_88
  • 2013-01-03 19:13:44
  • 4080

SQL Server 表变量与临时表区别

问题 1:为什么在已经有了临时表的情况下还要引入表变量?解答 1:与临时表相比,表变量具有下列优点: • 如 SQL Server ...
  • lovehongyun
  • lovehongyun
  • 2008-01-09 09:27:00
  • 11126

表变量和临时表的差别 (以前把表变量叫成变量表了,哎。。。)

临时表和表变量的区别。这是第三次遇到了。今次必须解决该问题。经过前两次蜻蜓点水式的查询相关资料,这次记录了下来,尽快详细深入处理一下这个盲点!...
  • luckysiesteven
  • luckysiesteven
  • 2016-01-04 15:58:03
  • 709

SQL SERVER临时表的使用&表变量的使用

临时表: 创建临时表可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。 本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个...
  • S630730701
  • S630730701
  • 2016-08-03 16:57:00
  • 2809

SQL Server 表变量和临时表系列之概念篇

问题引入 “菜鸟啊,最近我看到阿里云开发者论坛的数据库RDS中有人在提SQL Server表变量和临时表如何选择的问题,你去深入探讨下这个问题吧,解答解答他们的疑惑吧”,老鸟又开始为菜鸟找活干了...
  • lishimin1012
  • lishimin1012
  • 2017-01-06 14:37:19
  • 635

Sql表变量和临时表

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

临时表vs.表变量以及它们对SQLServer性能的影响

 问题 1:为什么在已经有了临时表的情况下还要引入表变量?解答 1:与临时表相比,表变量具有下列优点: • 如 SQL Server...
  • lainY7mail
  • lainY7mail
  • 2008-04-17 12:30:00
  • 2008

sqlserver临时表或表变量代替游标

为什么要用游标呢?数据量超过1万,游标就很慢了。 在很多场合,用临时表或表变量也可以替代游标 临时表用在表没有标识列(int)的情况下. 在表有标识列(int)的情况下可以用表变量,当然也可...
  • liangweiwei130
  • liangweiwei130
  • 2011-08-18 14:14:35
  • 5145

创建临时表,大数据的临时表与小数据量的表变量

1.  将数据倒入表中的方法: 已经存在的表:select * into #tempMail from MailLog where ActionFlag = N   不存在的表:create tabl...
  • lishuaide0517
  • lishuaide0517
  • 2010-04-07 10:32:00
  • 502

MySQL中的临时表使用方法

当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后多这些表运行查询。...
  • JimyJimang
  • JimyJimang
  • 2012-02-21 18:06:50
  • 1143
收藏助手
不良信息举报
您举报文章:表变量与临时表的优缺点?
举报原因:
原因补充:

(最多只允许输入30个字)