2012-02-28 11 views
0

クエリでWITH句を多く使用すると、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 

? 私の場合、各サブクエリは約1,000万行を返します。

+2

これはクエリによって異なります。あなたをサポートするために、あなたの質問を投稿してください!クエリのバージョンが異なる場合(WITH句の有無にかかわらず)、それらをすべて投稿してください! – Tim

+3

より速いこの声明のあなたの代案は何ですか?あなたもそれを投稿してください!通常、Oracleデータベースの場合、 'WITH'句を使用していれば、違いはありません! – Tim

+0

私は政策に従ってそれをすることができません(おかげで、自分自身を理解してください) – DmitryB

答えて

3

すべての秘密が含まれているので、私はあなたに両方のクエリのEXPLAIN PLANを見てみることをお勧めします。私の意見では、WITHは、サブクエリで特定のSQLを再利用できるようにする構文砂糖です。しかし、それが有用であるということは、常に最も効率的な計画につながるわけではありません。

はい、1000000は常に遅くなるでしょう。

2

WITH CLAUSEがOracleデータベースのパフォーマンスを改善しないことを確認しました。 クエリテキスト全体の繰り返しではなく、クエリ名のみを使用できます。

また、問合せで後で使用されるPL/SQLファンクションを定義できます。