2012-02-28 99 views
0

當我在查詢中使用很多WITH子句時,它會執行更長的時間,而不是沒有它。 查詢結構是這樣的:oracle查詢中的「WITH」子句優化

with t1 as (select some_fields from table1 inner join table2), 
    t2 as (select some_fields from t1 inner join table3), 
    t3 as (select some_fields from t2 inner join table4) 
select * from t3 

應使用類似的查詢優化是什麼辦法? 在我的情況下,每個子查詢返回約1000萬行。

+2

這取決於查詢!爲了支持你,請發佈你的查詢!如果你有不同版本的查詢(有或沒有'WITH'子句),請將它們全部發布! – Tim 2012-02-28 10:25:38

+3

你的這種說法更快嗎?你也可以發佈它!通常對於Oracle數據庫來說,如果你使用'WITH'或不使用! – Tim 2012-02-28 10:30:41

+0

我無法根據策略來做(謝謝,試着瞭解我自己 – DmitryB 2012-02-28 10:43:59

回答

3

在涉及所有祕密的情況下,我建議您查看兩個查詢的EXPLAIN PLAN。在我看來,WITH不過是語法糖,允許您在子查詢中重用某些sql。但總的來說,它並不總是能帶來最有效的計劃。

是的,10 000 000總是會變慢。

2

我確認WITH CLAUSE不會提高Oracle數據庫的性能。 它只允許使用查詢名稱而不是整個查詢文本的重複。

此外,它還允許定義隨後在查詢中使用的PL/SQL函數。