2011-12-12 95 views
1

我的经理问我不要使用递归查询,因为默认情况下递归意味着他声称缓慢。递归查询速度慢吗?

我只是想知道如果递归查询慢,如果有任何其他的替代方式。

编辑: 我在谈论一般的递归查询。我的经理刚告诉我停止使用递归。他的说法是在C#递归函数中很慢。因此,不要在Oracle上使用递归查询,这可能会很慢。

+0

向我们展示您想要实现的目标以及您目前的工作方式,并且我们可能有机会提出其他方法。 –

+0

查询中有多少行?你的查询索引?你执行这个查询多少次?我认为这个问题有点模糊。 – danihp

+0

我一般在说话。递归查询一般较慢,应该避免? – n3xus

回答

3

在绩效方面,只有基准很重要。猜测和类比是毫无价值的。

递归查询应该执行得很差,没有绝对的理由,只是因为它们是递归的。通常发生的情况是,对于较大的数据集,递归查询比针对类似大小的表的非递归查询要昂贵。

这不是一个从不使用递归查询的参数:它是一个用于测试我们的CONNECT BY查询与代表性数据卷并查看是否可能存在性能问题的参数。用于避免递归查询的机制(例如维护表来存储展平的层次结构)具有其自己的成本概要。

如果您想了解更多关于递归查询的替代方法,我回答了相关问题。 Check it out.

+0

+1 *知情*猜测在优化查询时有时可能很有价值,但对一些甚至不是RDBMS的错误类比是PHB行为在其最尖端。 –

2

递归一般不一定要慢。

我会考虑一个简单的事实,即有人说出这样一个普遍的伪事实,作为证明他在这个问题上应该被忽略的证据。

如果您编写递归代码,您对实际执行的内容知之甚少。在源代码和实际执行的内容之间可能会发生很多事情。

这就是说:有很多情况下,递归很慢,或消耗大量内存或导致一个计算器。

但通常递归是最明显的最简单的解决方案。

所以,如果你遇到一个问题,你认为:我可以解决这个问题,使用递归。做到这一点。

然后测试性能和可伸缩性是否合适。如果它们不是,则可以在调整解决方案(可能通过删除递归)时使用递归实现作为test oracle