Database DB存储过程操作设计-基于集合与基于游标

Database DB存储过程操作设计-基于集合与基于游标,database,stored-procedures,database-cursor,set-based,Database,Stored Procedures,Database Cursor,Set Based,有人告诉我,在设计存储过程时,基于集合的操作比基于游标的操作具有更好的伸缩性 有人能简明扼要地解释一下原因吗?尽我所能简明扼要地说: 在关系数据库引擎中,所有操作(无论是否在存储过程中)通常都会使用基于集的逻辑更好地扩展,因为这些引擎是为执行基于集的操作而优化的 对于引擎中的单个原子操作,通常存在固定的资源成本(可能相当高),无论它影响1行还是1000000行 游标会产生更高的成本,因为数据库引擎必须在原子操作成本的基础上维护游标的状态 *在一些边缘案例/问题类别(具体取决于您的RDBMS)中,

有人告诉我,在设计存储过程时,基于集合的操作比基于游标的操作具有更好的伸缩性


有人能简明扼要地解释一下原因吗?

尽我所能简明扼要地说:

在关系数据库引擎中,所有操作(无论是否在存储过程中)通常都会使用基于集的逻辑更好地扩展,因为这些引擎是为执行基于集的操作而优化的

对于引擎中的单个原子操作,通常存在固定的资源成本(可能相当高),无论它影响1行还是1000000行

游标会产生更高的成本,因为数据库引擎必须在原子操作成本的基础上维护游标的状态

*在一些边缘案例/问题类别(具体取决于您的RDBMS)中,过程逻辑的性能将优于基于集合的逻辑。

所有(或几乎所有)RDM都针对基于集合的操作而不是基于行的操作进行了优化。在大多数情况下,基于集合的解决方案优于基于行的解决方案。例如,即使是
SELECT*FROM table 1
也会比使用游标执行相同操作快很多倍。但是,在某些情况下,游标解决方案的性能更好。例如,在某些RDM(即SQLServer2005)中,使用基于集合的方法计算正在运行的聚合需要多次重新扫描数据,而基于游标的方法只需重新扫描一次。
需要使用游标的另一种情况是,应用程序的业务逻辑要求您单独处理每一行