Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sql中使用游标仍然被认为是一种不好的做法吗?_Sql_Cursor - Fatal编程技术网

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

在sql中使用游标仍然被认为是一种不好的做法吗?,sql,cursor,Sql,Cursor,我读过一些关于sql中的游标的文章,大多数都说它会占用大量内存等等,但那是很久以前的事了,比如2008年左右?我想知道,到目前为止,光标是否仍然被认为是一种不好的做法?与其说光标是一种不好的做法,倒不如说光标是一种不好的做法(通常是!)。有时使用游标是解决问题的有效方法 这更多的是与思维过程有关,一般来说,在集合和连接方面的思维效率不如程序思维 这方面的经典示例在ORM世界中称为“N+1”:这是指进行1次查询以获取(比如)ID列表,然后再进行N次查询以检索这些ID的行。这通常可以作为单个连接查询

我读过一些关于sql中的游标的文章,大多数都说它会占用大量内存等等,但那是很久以前的事了,比如2008年左右?我想知道,到目前为止,光标是否仍然被认为是一种不好的做法?

与其说光标是一种不好的做法,倒不如说光标是一种不好的做法(通常是!)。有时使用游标是解决问题的有效方法

这更多的是与思维过程有关,一般来说,在集合和连接方面的思维效率不如程序思维

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


如果你发现自己用光标来解决一个问题,请停下来考虑一下它是否可以以一种基于集合的方式来完成。

< P>它不是一个光标就是一个坏的练习(它经常是!)。有时使用游标是解决问题的有效方法

这更多的是与思维过程有关,一般来说,在集合和连接方面的思维效率不如程序思维

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


如果你发现自己用光标来解决一个问题,请停下来考虑一下它是否可以以一种基于集合的方式来完成。

不良实践?良好做法

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


然而,在许多情况下,游标是必需的。没有合理的替代方案,它们是语言中真正、强大的一部分。

坏习惯?良好做法

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

然而,在许多情况下,游标是必需的。没有合理的替代方案,它们是语言中真正、强大的一部分。

来自

使用光标的效率不如 使用默认结果集。在一个 默认结果集是唯一的数据包 从客户端发送到服务器的是 包含要执行的语句的数据包 执行。使用服务器游标时, 每个FETCH语句都必须从 将客户端连接到服务器,在服务器上 必须解析并编译为 执行计划

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

游标具有积极和副作用,如果您将其用于其设计目的,我们不能说这实际上是一种不好的做法。

使用光标的效率不如 使用默认结果集。在一个 默认结果集是唯一的数据包 从客户端发送到服务器的是 包含要执行的语句的数据包 执行。使用服务器游标时, 每个FETCH语句都必须从 将客户端连接到服务器,在服务器上 必须解析并编译为 执行计划

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

Cursor既有积极作用,也有副作用,如果您将其用于设计目的,我们不能说这实际上是一种不好的做法。

这取决于您所谈论的具体RDBMS。有些人绝对需要光标,有些人有办法。你不能用一般的“SQL标准”来回答这个问题——它太依赖于你所使用的具体供应商/产品了——这取决于你所谈论的具体RDBMS。有些人绝对需要光标,有些人有办法。你不能用一种通用的“SQL标准”方式来回答这个问题——它太依赖于你所使用的具体供应商/产品了