我被告知在设计存储过程时,基于集合的操作比基于游标的操作更好。
有人可以简单解释一下这是为什么吗?
答案 0 :(得分:2)
尽可能简洁地管理:
在关系数据库引擎中,所有操作(无论是否存储过程)通常都会使用基于集合的逻辑进行更好的扩展,因为这些引擎已针对执行基于集合的操作进行了优化。
对于引擎中的单个原子操作,通常存在固定的资源成本(可能相当高),无论它是否影响1或1,000,000行。
游标会产生更高的成本,因为数据库引擎必须在原子操作成本之上维护游标的状态。
*在程序逻辑的性能优于基于集合的情况下,会出现一些边缘情况/类问题(具体取决于您的RDBMS)。
答案 1 :(得分:0)
所有(或几乎所有)RDMS都针对基于集合的操作进行了优化,而不是基于行的。对于大多数情况,基于集合的解决方案优于基于行的解决方案。例如,即使SELECT * FROM table1
的执行速度也比使用游标的速度快很多倍。但是,在某些情况下,光标解决方案的性能会更好。例如,在某些RDMS(即SQLServer 2005)中使用基于集合的方法计算运行聚合涉及多次重新数据,而基于游标仅执行一次。
当您需要使用游标时,另一种情况是应用程序的业务逻辑要求您单独处理每一行。