DB存储过程操作设计 - 基于集合和基于游标的设置

时间:2011-06-18 05:43:59

标签: database stored-procedures database-cursor set-based

我被告知在设计存储过程时,基于集合的操作比基于游标的操作更好。

有人可以简单解释一下这是为什么吗?

2 个答案:

答案 0 :(得分:2)

尽可能简洁地管理:

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

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

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

*在程序逻辑的性能优于基于集合的情况下,会出现一些边缘情况/类问题(具体取决于您的RDBMS)。

答案 1 :(得分:0)

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