为什么临时表居然会比表变量的效率高!!!!!!
表变量:
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秒不到,搞定,我实在想不通
其他测试环境完全一样!
小弟实在不才,想请教,是怎么会事,或者说我哪些理解不对!!!谢谢