递归查询慢吗? [关闭]
Posted
技术标签:
【中文标题】递归查询慢吗? [关闭]【英文标题】:Is recursive query slow? [closed] 【发布时间】:2011-12-12 10:46:45 【问题描述】:我的经理要求我不要使用递归查询,因为他声称递归默认意味着慢。
我只是想知道递归查询是否很慢以及是否有其他替代方法。
编辑: 我说的是一般的递归查询。我的经理刚刚告诉我停止使用递归。他声称 C# 递归函数很慢。所以不要在 Oracle 上使用递归查询,这也会很慢。
【问题讨论】:
向我们展示您想要实现的目标,以及您目前的做法,我们可能有机会提出替代方法。 查询有多少行?您的查询是否已编入索引?您执行此查询多少次?我认为这个问题有点模棱两可。 我说的是一般情况。递归查询通常较慢并且应该避免吗? 你的经理显然不知道他在说什么。试图用一种完全不同的语言将一种语言的课程应用于完全不同的场景是徒劳的。 那是波什的巨大弹跳负荷。我强烈建议尽可能无视经理的编程建议。无论递归查询是否合适,这都是一个糟糕的理由。 【参考方案1】:在性能方面,只有基准很重要。猜测和类比毫无价值。
递归查询性能不佳并没有绝对的理由,仅仅因为它们是递归的。通常发生的情况是,递归查询对更大的数据集比对类似大小的表的非递归查询更昂贵。
这不是从不使用递归查询的论据:它是针对代表性数据量测试我们的 CONNECT BY 查询并查看我们是否可能存在性能问题的论据。避免递归查询的机制(例如维护表以存储扁平层次结构)具有自己的成本配置文件。
如果您想了解有关递归查询替代方案的更多信息,我不久前回答了一个相关问题。 Check it out. 。
【讨论】:
+1 Informed 在优化查询时,猜测有时可能很有价值,但对甚至不是 RDBMS 的东西进行错误的类比是最重要的 PHB 行为。 【参考方案2】:一般来说,递归不必很慢。
我会考虑一个简单的事实,即某人说出如此普遍的伪事实作为证明他应该在这件事上被忽略。
如果您编写递归代码,您对实际执行的内容知之甚少。在您的源代码和实际执行的代码之间可能会发生很多事情。
也就是说:在很多情况下递归很慢,或者消耗大量内存或导致堆栈溢出。
但通常递归是最简单的解决方案。
因此,如果您遇到您认为的问题:我可以使用递归来解决。去做吧。
然后测试性能和可扩展性是否合适。如果不是,您可以在调整解决方案时将递归实现用作test oracle(可能通过删除递归)。
【讨论】:
以上是关于递归查询慢吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章