游标和循环效率比较
都说循环效率比游标高,尤其是大数据量的时候,可为啥我做的测试结果是游标效率很高, 请高人指点.以下是我做测试的语句
SQL Server 2005
/*游标语句*/
--32万条数据用了14秒
DECLARE @EMPLOYEE VARCHAR(10)
declare @begin varchar(30)
declare @end varchar(30)
declare @cnt int
set @cnt=1
set @begin=convert(varchar(23),getdate(),121)
print @begin
DECLARE CURSOR_AUTO_ALL CURSOR FOR
select em_no from users
OPEN CURSOR_AUTO_ALL
FETCH NEXT FROM CURSOR_AUTO_ALL INTO @EMPLOYEE
WHILE @@FETCH_STATUS=0
BEGIN
set @cnt=@cnt+1
FETCH NEXT FROM CURSOR_AUTO_ALL INTO @EMPLOYEE
END
set @end=convert(varchar(23),getdate(),121)
print @end
print @cnt
CLOSE CURSOR_AUTO_ALL
DEALLOCATE CURSOR_AUTO_ALL
/*循环*/
--32万条数据用了....过了9分钟还没运行完....
declare @employee varchar(30)
declare @begin varchar(30)
declare @end varchar(30)
declare @cnt int
set @cnt=1
set @begin=convert(varchar(23),getdate(),121)
print @begin
select identity(int,1,1) as id,em_no into #us from users
set @cnt=@@rowcount
while @cnt>0
begin
select top 1 @employee=em_no from #us where id=@cnt
set @cnt=@cnt-1
end
drop table #us
set @end=convert(varchar(23),getdate(),121)
print @end
[解决办法]
一个是读取32W次 1条记录 (游标)
一个是读取32W次 32W条记录 (循环)
当然慢
循环的好处是一次性读32W条记录
[解决办法]
数据量不大的话,游标的效率还是可以接受的
[解决办法]
就是有差距,也不会有这么大的差距。。。
代码优化下
[解决办法]
我在用的时候 如果游标超过 几千 就有问题了
用户的环境 工作负载很大 , 这种肯定不行.
[解决办法]
游标没干任何事
循环产生临时表就很多I/O
这比较有何意义
一般来说,游标必然循环,游标不适于循环比较性能,而是与SQL语句处理比较性能,关键在处理本身
[解决办法]
你插入个100W数据试试?
游标和循环的效率都不高。
[解决办法]
区别不是很大
游标是对行集进行逐行遍历操作,循环则是重复某一组操作
游标占用的资源比较多
尽量用循环
[解决办法]
我打了6排字,犹豫了下,还是都删了