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

caiyunxia 2002-10-30 07:43:13
什么情况下使用表变量?
什么情况下临时表?
...全文
132 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizongqi 2003-04-24
  • 打赏
  • 举报
回复
UP
蓝天 2002-10-31
  • 打赏
  • 举报
回复
实际经验就是能用表变量就不用临时表(不过2000才有表变量,现在我还是用临时表比较熟悉,呵呵)
txchen 2002-10-31
  • 打赏
  • 举报
回复
个人认为:
1.表变量在内存中,临时表存放在硬盘上;
2.用临时表要考虑锁不锁表的问题;
3.数据量太大应该用临时表。
txchen 2002-10-31
  • 打赏
  • 举报
回复
个人认为:
1.表变量在内存中,临时表存放在硬盘上;
2.用临时表要考虑锁不锁表的问题;
3.数据量太大应该用临时表。
zqllyh 2002-10-30
  • 打赏
  • 举报
回复
这是帮助呀?
能不能讲点实际应用经验?
我很想找出应用临时表及表变量的界限来。
supsuccess 2002-10-30
  • 打赏
  • 举报
回复
学习 :)
蓝天 2002-10-30
  • 打赏
  • 举报
回复
存盘操作一般由后台进程来完成,我觉得用户不必太操心。
蓝天 2002-10-30
  • 打赏
  • 举报
回复
贴出来看看:

尽可能使用表变量而不使用临时表。table 变量有以下优点:

table 变量的行为类似于局部变量,有明确定义的作用域。该作用域为声明该变量的函数、存储过程或批处理。
在其作用域内,table 变量可像常规表那样使用。该变量可应用于 SELECT、INSERT、UPDATE 和 DELETE 语句中用到表或表的表达式的地方。但是,table 不能用在下列语句中:

INSERT INTO table_variable EXEC 存储过程。

SELECT select_list INTO table_variable 语句。

在定义 table 变量的函数、存储过程或批处理结束时,自动清除 table 变量。

在存储过程中使用表变量与使用临时表相比,减少了存储过程的重新编译量。


涉及表变量的事务只在表变量更新期间存在。这样就减少了表变量对锁定和记录资源的需求。
不支持在表变量之间进行赋值操作。另外,由于表变量作用域有限,并且不是持久数据库的一部分,因而不受事务回滚的影响。
zqllyh 2002-10-30
  • 打赏
  • 举报
回复
1、表变量比临时表速度快一点,但要受用户量及服务器硬件及数据量限制,并不是所有时候都比临时表快。
2、有一些操作表变量不能支持,比如INTO,动态语句之类。
caiyunxia 2002-10-30
  • 打赏
  • 举报
回复
谢谢,如没有其他的,明天给分,加100
j9988 2002-10-30
  • 打赏
  • 举报
回复
还有:函数、存储过程和批处理的生存期控制着数据表变量的生存期。它不如临时表。
j9988 2002-10-30
  • 打赏
  • 举报
回复
要从表变量的作用域,支持不支持的操作,机器内存大小等几方面考虑。
如:
.表变量相当于ADO的RECORDSET,速度比临时表快得多。
表变量不能用在下列语句中:
INSERT INTO table_variable EXEC 存储过程。
SELECT select_list INTO table_variable 语句。
在定义 table 变量的函数、存储过程或批处理结束时,自动清除 table 变量。
但临时表支持。
.表变量速度比临时表快得多(如果内存足够)
如果数据量不大:
微软 BOOK ON LINE 内说:尽可能使用表变量而不使用临时表
CSDNM 2002-10-30
  • 打赏
  • 举报
回复
关于使用:
1、有些地方不能使用临时表,如自定义函数。
2、同意 pengdali(大力) ,有些地方特别是不知道表结构的时候用临时表方便。
3、全局临时表的功能是表变量没法达到的。
4、表变量不必删除,也就不会有命名冲突,临时表特别是全局临时表用的时候必须解决命名冲突。


强烈建议:
触发器、自定义函数用表变量;存储过程看情况,大部分用表变量;特殊的应用用临时表。
icevi 2002-10-30
  • 打赏
  • 举报
回复
如果数据量很大,还是用临时表好些。
pengdali 2002-10-30
  • 打赏
  • 举报
回复
肤浅理解:
表变量:需要事先知道表结构
普通临时表:只在当前会话中可用与表变量相同 into一下就可以了,方便
全局临时表:可在多个会话中使用存在于temp中需显示的drop
CSDNM 2002-10-30
  • 打赏
  • 举报
回复
个人观点:
1、表变量缺省放在内存,速度快,所以在触发器,存储过程里如果数据量不大,应该用表变量。
2、临时表缺省使用硬盘,一般来说速度比较慢,那是不是就不用临时表呢?也不是,在数据量比较大的时候,如果使用表变量,会把内存耗尽,然后使用TEMPDB的空间,这样主要还是使用硬盘空间,但同时把内存基本耗尽,增加了内存调入调出的机会,反而降低速度。这种情况建议先给TEMPDB一次分配合适的空间,然后使用临时表。


caiyunxia 2002-10-30
  • 打赏
  • 举报
回复
表变量比较占内存资源,数据量大,是否有影响
icevi 2002-10-30
  • 打赏
  • 举报
回复
表变量只存放在内存中,临时表需要写磁盘。所以一般情况下,用表变量会快些。

用法不太一样,有些时候用表变量更方便。

具体的再看SQL 2000的帮助。试用下就知道了。
caiyunxia 2002-10-30
  • 打赏
  • 举报
回复
满意可以再加100分

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧