我的Oracle安装好后,没有做任何优化的情况下,现有三张表进行联合查询,查询SQL如下:
select * from tableA a,tableB b,tableC c
 where a.COMPID=b.COMPID and  a.OBJID=b.OBJID and a.OBJID = c.OBJID tableA,tableB ,tableC 无主键,无索引,无关联现在的问题是,当三张表中的数据量比较大时,10000条左右
以上查询就死住了,等待很长时间也无结果返回。
将数据量变小为100条数据,查询正常返回结果。我采取了建索引的方法,在tableA的COMPID和OBJID,tableB的COMPID,tableC的OBJID上建立了索引,
但是仍然在大数据量的情况下无法查询。同样的大数据下查询,在SQL Server上则没有问题。请问是Oracle的优化问题么?该如何解决这个问题呢?

解决方案 »

  1.   

    select  /*+ USE_NL(a,b,c)*/ *   from   tableA   a,tableB   b,tableC   c
      where   a.COMPID=b.COMPID   and     a.OBJID=b.OBJID   and   a.OBJID   =   c.OBJID  
    改成这样试试
      

  2.   

    你建了索引还可以通过分析表和索引走CBO
      

  3.   

    看情况.对于你这样只有连接条件而无其它过滤的,一般来说,索引是没有什么用处的.
    用索引不如full scan.
    也许修改一下优化策略考虑一下:
    ALTER SESSION SET OPTIMIZER_MODE=first_rows_100 (或者是first_rows_10).
    不过你的系统得支持9i以上.8i或者8i之前的我不了解.
      

  4.   

    1万行都喊慢啊!!
    又拿SQLSERVER来比