2

VIEW1 は:

SELECT A, B, C FROM view2
UNION ALL
SELECT A, B, C FROM view3
  INNER JOIN TBL5 ON view3.CODE = TBL5.CODE

列 C はソース テーブルでインデックス付けされており、select ステートメントのいずれかを個別に実行すると、インデックスが使用され、すぐに戻ってきます。ビューを使用するとタイムアウトします。SELECT * FROM VIEW1私は、オラクルがビューに対してクエリを書き直し、事後に述語を適用するのではなく、有用な場合はインデックスを使用したという印象を受けました。

私は何を間違っていますか?上記のサンプルビューは問題を明らかにしていますが、実際のビューはそれぞれ数十のテーブルを結合しているため、ビューが本当に必要です。

4

2 に答える 2

2

オプティマイザは、ビューに反するため、実行計画を作成する前に CODE の値がどうなるかを知りません。11g を使用している場合は、PUSH_PRED オプティマイザ ヒントを使用して、期待どおりに動作させることができます。

于 2010-11-24T15:20:37.713 に答える
0

ヒントを試すことができます。または、テーブルが分析されていることを確認してください。

もう1つの考え-多分メーター化されたビューを作成しますか?

于 2010-11-24T13:06:32.063 に答える