VIEW1は次のとおりです。ビューにUNION ALLが含まれている場合、Oracleにインデックスを使用させるにはどうすればよいですか?
SELECT A, B, C FROM view2
UNION ALL
SELECT A, B, C FROM view3
INNER JOIN TBL5 ON view3.CODE = TBL5.CODE
列Cは、ソーステーブルにインデックスを付け、そして私はselect文のいずれかを実行すると、個別に、インデックスを使用し、バックフラッシュできています。ビューを使用するとタイムアウトします。私は、Oracleがビューに対してクエリを書き直し、を実行してから事実の後に述語を適用するのではなく、有用な場合にインデックスを使用したという印象を受けました。
私は間違っていますか?上のサンプルビューは問題を明らかにしますが、実際のビューはそれぞれ数十のテーブルに加わり、ビューが本当に必要です。
"CODE"列はインデックス列ですか?あなたは "列C"と言う。 P.S. http://sctom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:625452100346586215 – Tim
@Tim:はい、コードには索引もあります。 view2、view3とこのUNION ALLの2番目の部分はすべて最適化され、クエリとうまく機能しますが、このビュー自体を照会すると事態が悪化します。 –
本当に役に立つアドバイスを提供するために、このクエリの実行計画と、別々に実行される2つの部分の実行計画を確認する必要があると思います。 –