何时在Oracle中使用递归CTE

时间:2013-03-30 13:51:09

标签: sql performance oracle hierarchy

在Oracle中,我尝试以不同的方式运行相同的层次结构查询:使用CONNECT BY和递归CTE。根据执行计划,最好使用CONNECT BY。

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

感谢。

1 个答案:

答案 0 :(得分:2)

  

“根据执行计划,最好使用CONNECT BY。”

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

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

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

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