为什么临时表居然会比表变量的效率高!!!!!!

skyboy0720 2005-03-16 02:33:15
表变量:
declare @tb table(id int identity(1,1),re varchar(100))
insert @tb select re=substring(@str1,id,charindex(@splitchar,@str1+@splitchar,id)-id)
from 序数表
where id<=len(@str1)+1 and charindex(@splitchar,@splitchar+@str1,id)-id=0

临时表:
select re=substring(@str1,id,charindex(@splitchar,@str1+@splitchar,id)-id),id=identity(int,1,1)
into #ta from 序数表
where id<=len(@str1)+1 and charindex(@splitchar,@splitchar+@str1,id)-id=0

以上是我在做一个批量传递字符串,拆分入库的2种不同方法(1,2,3,4,5,这样的格式)
现在把情况说说!
原来一直用的临时表,效率很高,后来由于要修改数据库帐户的权限,因为临时表是存放在TEMP数据库
我单独为这个数据库设置帐户以后,而不是用超级管理员,当然就不能用临时表了,于是想到了表变量
查看资料,说,表变量是存放在内存中处理的,效率要比临时表高,可当我完成以后
(修改的部分其实就是我说的以上那句)结果,假设我原来可以提交8000个字符,现在却只能提交1000个字符,如果非要提交8000个字符,总是抱超时!!我于是又在服务器上,用跟踪器跟踪,然后看到这个存储过程执行的时间居然是30多秒,而且还未成功,原来用临时表的时候,3秒不到,搞定,我实在想不通
其他测试环境完全一样!
小弟实在不才,想请教,是怎么会事,或者说我哪些理解不对!!!谢谢
...全文
496 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
superhasty 2005-07-21
  • 打赏
  • 举报
回复
临时表相对而言表变量主要是多了I/O时间,但少了对内存资源的占用。

数据量较大的时候,由于对内存资源的消耗较少,使用临时表比表变量有更好的性能。
lihongyue 2005-03-16
  • 打赏
  • 举报
回复
学习
skyboy0720 2005-03-16
  • 打赏
  • 举报
回复
NOBODY?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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