【问题标题】:When to use recursive CTE in Oracle [closed]何时在 Oracle 中使用递归 CTE [关闭]
【发布时间】:2013-03-30 13:51:09
【问题描述】:

在 Oracle 中,我尝试以不同的方式运行相同的分层查询:使用 CONNECT BY 和递归 CTE。根据执行计划 CONNECT BY 更可取。

当递归 CTE 在 Oracle 中工作得更快时,是否有任何情况(或者是否有更适合使用它们的情况)?

谢谢。

【问题讨论】:

  • 递归 CTE 提供了对实际递归的更多控制(深度优先,广度优先),但除此之外,我看不出有什么理由比 connect by 更喜欢它。

标签: sql performance oracle hierarchy


【解决方案1】:

“根据执行计划 CONNECT BY 更可取。”

这并不奇怪。几十年来,CONNECT BY 语法一直是 Oracle 工具箱的一部分,因此 Oracle 有很多时间来调整优化器以高效地处理它。递归 CTE 较新。

我还怀疑 CBO 会更难理解递归 CTE 的成本,因为它们是程序化的,而不是数据驱动的。

另一方面,很多人(不仅仅是初学者)在掌握 Oracle 层次语法方面存在问题,而递归是一个标准的编程概念。所以也许这就是它们有用的地方。

顺便说一句,我认为不应该在性能至关重要的情况下使用分层查询。如果您有大量数据需要快速且经常以分层格式检索,您可能应该考虑另一种方法,例如实现传递闭包。 Find out more.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 2018-09-30
    • 1970-01-01
    • 2021-09-29
    相关资源
    最近更新 更多