2

一番上にサブクエリの WITH ステートメントがあるクエリがあり、サブクエリでいくつかの CONNECT BY を実行しています。サブクエリには数万行を含めることができ、CONNECT BY 階層の深さに制限はありません。現在、このクエリには 30 秒以上かかります。ファクタリングされたサブクエリ用に作成された一時テーブルに配置するインデックスを指定して、CONNECT BYを高速化すること、または別の方法で高速化することは可能ですか?

4

2 に答える 2

2

MATERIALIZEサブクエリが繰り返し再実行されないように、クエリのサブファクタリングでヒントを使用できる場合があります。文書化されていませんが、WITH 句の結果を一時テーブルに確実にフラッシュするようです。

Jonathan Lewis のブログには、その使用方法の例がいくつかあります。ただし、ヒントは文書化されていないため、多少のリスクがあります。

于 2010-02-26T15:15:33.310 に答える
2

クエリでそれを正しく行う方法はありOracleません。サポートされていませんEager Spool

結果セットをインデックス付きの一時テーブルに一時的に格納し、CONNECT BYそれに対してクエリを発行できます。

ただし、クエリの sargable 等価条件の場合、 はCONNECT BY通常、ほとんどの場合、インデックスよりも優れたハッシュ テーブルを作成します。

ここに質問を投稿していただけますか?

于 2010-02-26T11:36:52.957 に答える