【问题标题】:DB stored procedure operation design - set based vs cursor basedDB存储过程操作设计——基于集合vs基于游标
【发布时间】:2011-06-18 05:43:59
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    尽量简洁:

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

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

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

    *会有一些边缘情况/问题类别(具体取决于您的 RDBMS),其中过程逻辑的性能优于基于集合的。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2014-11-08
        • 1970-01-01
        • 2016-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-01
        • 1970-01-01
        相关资源
        最近更新 更多