以下涉及a,b 分开来查询很快,但是合在一起用条件where 筛选数据就是很慢!
其中a为所建视图,b为另一sql
已根据需要建立了相关的索引。但是还是很慢,子查询中的数据多,但
结果显示的数据不多。select a.a, a.b, a.c, b.a, b.b,b.c,b.d
from 
( ) a, 
( ) b
 where a.goods_id=b.goods_id望解决方案。另求一些oracle 中查询数据的优化相关资料

解决方案 »

  1.   

    只有在索引上做文章主要是goods_id,否则请重新设计系统.
      

  2.   

    select /*+ use_nl(b a) */ 
    a.a, a.b, a.c, b.a, b.b,b.c,b.d
    from 
    ( ) a, 
    ( ) b
     where a.goods_id=b.goods_id
      

  3.   

    例如这样:
    ●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。 
    ●在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。 
    ●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。 
      

  4.   

    我认为最好的两本电子书:Oracle9i Database Performance Planning a96532.pdf
    Oracle9i Database Performance Tuning Guide and Reference a96533.pdf
      

  5.   

    在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。如果是在DSS系统中,那么不是不应该建立索引,而是应该建立bitmap index
      

  6.   

    建议将视图中的表拿出来自己做连接.如果系统中的表上相关列已经建立索引,则一般不用自己再建立索引.在使用索引连接的时候,并不是用了所有索引都可以提高速度,有的时候在连接的时候要将某个索引去掉,这里有关于sql优化的文章.http://www.51blog.net/artCatolog.asp?classID=6