我有一个查询,它在顶部有一个子查询的 WITH 语句,然后我在子查询上运行了几个 CONNECT BY。子查询可以包含数万行,并且 CONNECT BY 层次结构的深度没有限制。目前,此查询需要 30 秒以上;是否可以在为分解子查询创建的临时表上指定索引以加快 CONNECT BY 速度,或者以其他方式加快速度?
问问题
2741 次
2 回答
2
在查询中没有办法做到这一点:Oracle
不支持Eager Spool
.
您可以将结果集临时存储在索引临时表中并CONNECT BY
针对它发出查询。
但是,对于查询中不可分割的相等条件,CONNECT BY
通常会构建一个哈希表,在大多数情况下甚至比索引更好。
你能在这里发布你的查询吗?
于 2010-02-26T11:36:52.957 回答
2
您可能可以将MATERIALIZE
提示与查询子分解一起使用,这样子查询就不会被迭代地重新运行。虽然它没有记录,但它似乎可靠地将 WITH 子句的结果刷新到临时表中。
Jonathan Lewis 的博客有几个如何使用它的例子。但是,由于提示的无证性质,存在一些风险。
于 2010-02-26T15:15:33.310 回答