在sql中使用游标仍然被认为是一种不好的做法吗?

时间:2015-09-21 01:48:59

标签: sql cursor

我已经阅读了一些关于sql中游标的文章,其中大多数都说它会占用大量内存等等,但那是很久以前的,就像2008年那样?我想知道到目前为止光标是否仍被视为不良做法?

3 个答案:

答案 0 :(得分:3)

糟糕的做法?好的做法?

与许多不同语言的许多方面一样,游标既有正面也有负面。作为一般规则,游标使优化查询变得更加困难。因此,如果查询可以表示为基于集合的查询,那么它应该是。

然而,在许多情况下,游标是必要的。没有合理的选择,它们是语言的真正有力的一部分。

答案 1 :(得分:2)

光标不是很糟糕的做法(通常是!)。有时使用游标是解决问题的有效方法。

在程序上进行思考更多的事情通常不如在集合和联接方面进行思考那样有效。

这个经典的例子被称为N + 1'在ORM世界中:这是指进行1次查询以获取(比方说)ID列表,然后进行N次查询以检索这些ID的行。这通常可以作为单个连接查询来完成。

如果您发现自己使用光标解决问题,请暂停一下,并考虑是否可以基于集合的方式完成。

答案 2 :(得分:1)

来自MSDN:Cursor Implementations

  

使用游标的效率低于   使用默认结果集。在一个   默认结果设置唯一的数据包   从客户端发送到服务器是   包含语句的数据包   执行。使用服务器游标时   必须从中发送每个FETCH语句   客户端到服务器,在哪里   必须解析并编译成一个   执行计划。

     

如果是Transact-SQL语句   返回一个相对较小的结果集   可以缓存在内存中   可用于客户端应用程序,   你知道在执行之前   声明你必须检索   整个结果集,使用默认值   结果集。仅使用服务器游标   当需要游标操作时   支持的功能   申请,或只是部分   结果集可能会被检索。

光标既有正面效果又有副作用,如果你将它们用于它们的设计目的,我们就不能说它实际上是一种不好的做法。