2

我有一個查詢,其頂部有一個子查詢的WITH語句,然後我在子查詢上運行幾個CONNECT BY。子查詢可以包含數以萬計的行,並且CONNECT BY層次結構的深度沒有限制。目前,這個查詢需要30秒以上;是否可以指定索引放在爲分解子查詢創建的臨時表上以加速CONNECT BY,或以另一種方式加速?如何在子查詢因式分解的臨時表上創建索引?

回答

2

在查詢中沒有辦法正確執行該操作:Oracle不支持Eager Spool

您可以將結果集臨時存儲在索引臨時表中,並針對它發出CONNECT BY查詢。

但是,對於查詢中不可爭辯的相等條件,CONNECT BY通常會構建一個散列表,該表在大多數情況下甚至比索引更好。

您能否在此發佈您的查詢?

+0

你怎麼可以添加/創建索引到你的臨時表?我正在使用這種語法,但是這是否是正確的開始? 'CREATE temp AS SELECT abc FROM def' – Gaffi 2013-04-19 20:27:23

2

您可能可以將MATERIALIZE提示與查詢子因子一起使用,以便子查詢不會迭代重新運行。雖然它沒有記錄,但它似乎可靠地將WITH子句的結果刷新到臨時表中。

Jonathan Lewis' blog有幾個如何使用它的例子。但是,由於提示的無證性質,存在一些風險。

相關問題