SQL Server 快进游标

标签 sql sql-server stored-procedures

人们普遍认为,应尽可能避免在存储过程中使用游标(用基于集合的逻辑等替换)。如果您需要迭代某些数据,并且可以以只读方式执行,那么快进(只读前进)游标是否比 while 循环效率更高或更低?根据我的调查,光标选项通常速度更快,并且使用更少的读取和 CPU 时间。我没有做过任何广泛的测试,但这是其他人发现的吗?这种类型的游标(快进)是否会带来额外的开销或资源,我不知道这些开销或资源可能会很昂贵。

所有关于不使用游标的讨论实际上都是为了在基于集合的方法可用时避免使用游标,以及使用可更新游标等。

最佳答案

虽然快进游标在 Sql Server 2005 中确实有一些优化,但它们在性能方面并不真的接近基于集合的查询。在极少数情况下,游标逻辑不能被基于集合的查询替代。游标本质上总是较慢,部分原因是您必须不断中断执行才能填充局部变量。

这里有一些引用资料,如果您研究这个问题,这只是冰山一角:

http://www.code-magazine.com/Article.aspx?quickid=060113

http://dataeducation.com/re-inventing-the-recursive-cte/

关于SQL Server 快进游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37029/

相关文章:

java - 将没有主键的 SQL View 映射到 JPA 实体

mysql - 如何使用LIKE子句比较同一个表中的两列?

sql - 使用第一个存储过程中的变量在另一个存储过程中调用一个存储过程

sql - 存储过程 - 选择然后插入

MySQL查询浏览器程序错误代码-1

c# - 在 C# 中缓存存储过程结果的最佳方法

php - 按用户评论过滤 - SQL 参数数量必须在 0 到 65535 之间

SQL:ALTER COLUMN 到更短的 CHAR(n) 类型

java - Oracle pl/SQL 数字或值错误

sql - 在一个 select 语句中使用一个 where 子句可以有多个链接服务器吗?