1
select /* all_rows */x1,x2,x3 
from view_x
where x1 in 
(select a.b1 from mytable a,mytable2 b
where a.b2=b.c2)

view_x他のソースからデータを取得しようとしているビューです(@othertable_dblink

私はb1にインデックスを持っています。しかし、 view_x は view であるため、その上にインデックスを作成する権限がありません。

注:これにより、mytable と mytable2 で「table access full」のようなエラーが発生します。

私の質問:「テーブルアクセスがいっぱい」にならないようにすることで、これにかかる時間を短縮するにはどうすればよいですか

クエリのチューニング手法があれば、教えてください。

4

1 に答える 1

3

「Table access full」はエラーではなく、データ アクセス パスです。場合によってはそれが最適な場合もあります。

パフォーマンスの問題が副選択にあると確信している場合は、最適なインデックスを高速化する可能性があります。

  • 索引付けmytable2(c2)
  • インデックスmytable1(b2,b1)(その順)

結合に役立つようにインデックスを作成する必要があるフィールドは と ですmytable2.c2mytable1.b2インデックスmytable.b1だけでは、結合にはまったく役立ちません。

ただし、テーブルのサイズとその結合によって返される行数によっては、フル スキャンが最速のオプションになる場合があります。

于 2014-03-04T04:17:12.967 に答える