游标和循环效率比较
时间:2011-11-18
来源:互联网
都说循环效率比游标高,尤其是大数据量的时候,可为啥我做的测试结果是游标效率很高, 请高人指点.以下是我做测试的语句
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
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
作者: tjfrog 发布时间: 2011-11-18
一个是读取32W次 1条记录 (游标)
一个是读取32W次 32W条记录 (循环)
当然慢
循环的好处是一次性读32W条记录
一个是读取32W次 32W条记录 (循环)
当然慢
循环的好处是一次性读32W条记录
作者: bbbbbben 发布时间: 2011-11-18
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28