2014-03-04 56 views
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) 

为是一个视图,它试图从其他来源(@othertable_dblink我需要查询调优techiniques建议

我有指数B1得到的数据。但由于view_x是一个视图,我没有权限创建一个索引。

注:由于这一点,MYTABLE和mytable2是怎么回事错误,如“表的访问充满”

我的问题:我怎样才能减少对这篇文章的时候,不容许它去为“表访问全”

如果有任何查询调优技术,请让我知道。

+0

你的问题很混乱。 B1? @othertable_dblink? –

+1

查询优化的一些初始步骤是:1)定义问题 - 正在检索多少数据,需要多长时间,需要多长时间。 2)看看解释计划,看看语句是如何执行的。运行'解释计划选择...',然后'从表(dbms_xplan.displaly);'选择*。有了这些信息,问题可能就很明显,有人可以回答,或者更有可能我们需要更多的信息。 –

回答

3

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

如果你确定性能问题是关于子选择,加快,截至最佳指标可能:

  • 指数上mytable2(c2)
  • 指数上mytable1(b2,b1)(按顺序)

需要被索引的字段为加盟是有用的是mytable2.c2mytable1.b2,独上mytable.b1指数将不利于为参加的。

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