如何在子查询因子临时表上创建索引?

时间:2010-02-26 11:33:02

标签: performance oracle subquery common-table-expression indexing

我有一个查询,它在顶部有一个子查询的WITH语句,然后我在子查询上运行几个CONNECT BY。子查询可以包含数万行,并且CONNECT BY层次结构的深度没有限制。目前,此查询耗时超过30秒;是否可以指定索引来放置为因子子查询创建的临时表以加速CONNECT BY,或者以另一种方式加速?

2 个答案:

答案 0 :(得分:2)

在查询中无法正确执行此操作:Oracle不支持Eager Spool

您可以将结果集临时存储在索引的临时表中,并针对它发出CONNECT BY查询。

但是,对于查询中的unsargable相等条件,CONNECT BY通常会构建一个哈希表,在大多数情况下甚至比索引更好。

你能在这里发表你的问题吗?

答案 1 :(得分:2)

您可以将MATERIALIZE提示与查询子因子一起使用,以便不会迭代地重新运行子查询。虽然它没有文档,但它似乎可以可靠地将WITH子句的结果刷新到临时表中。

Jonathan Lewis' blog有几个如何使用它的例子。然而,由于暗示的无证性,存在一些风险。