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 是一个视图,我没有权限在其上创建索引。

注意:因此,mytable 和 mytable2 会出现“表访问已满”之类的错误

我的问题:我怎样才能减少这方面的时间,不允许它去“表访问已满”

如果有任何查询调优技术,请告诉我。

4

1 回答 1

3

“表访问已满”不是错误,而是数据访问路径。有时它甚至是最佳的。

如果您确定性能问题出在子选择上,则可能会加快最佳索引的速度:

  • 索引mytable2(c2)
  • 索引mytable1(b2,b1)(按此顺序)

需要索引才能对连接有用的字段是mytable2.c2and mytable1.b2,单独的索引对mytable.b1连接根本没有帮助。

但是根据表的大小和该连接返回的行数,完全扫描可能是最快的选择。

于 2014-03-04T04:17:12.967 回答