日期:2014-05-16  浏览次数:20713 次

游标和while循环性能问题
游标和while循环那个性能好呢?

多次看到说是使用这种方式必有表效率好,这是真的吗?

declare @index int;
set @index = 0;
while(@index < 10)
begin
select * from A where id=@index
set @index=@index+1;
end;


就我的理解,游标是获取每个行的指针。
所以能够快速的定位到下一行。
但是while中每次都要进行查找,这样的效率高吗?可能游标初始化需要不少时间吧?

------解决方案--------------------
可能我说的不是太准确,游标是需要分配额外资源的,相对于循环来说性能肯定是差一些的,特别是当游标的结果集比较大的时候,数据库会在tempdb中建立临时数据集进行操作,而循环不会,直接通过主键或索引从表中读取数据的开销会小很多
------解决方案--------------------
非要相比的话,可能while会高一点点,不过总得来说,恐怕能解决所有问题的T-SQL功能也就只有游标+穷举(这句不谈性能),其他的多多少少都有些限制。
关系数据库和SQL最重要的是集合论和谓词逻辑。集合操作的思维不到万不得已不要抛弃。



引用:
有人教导俺 ‘能不用游标就尽量不要用’ 
真的吗
我也这样认为,不过还是坚持具体情况具体分析,如果处理逻辑很复杂,而且数据量不大,游标也不失为一个很好的做法。