如下语句,已经咨询很多高手,现在已经强制索引了
表有200万数据select /*+ index (表,索引名)*/  a.*,b.Name  from A a left join B b where a.code=b.code where rownum=1但是速度还是非常慢,如果把left join 改为 inner join,就非常快,但是这里只能用left join ,相同的语句在sqlserver中运行仅仅需要几毫秒select  top 1 a.*,b.Name  from A a left join B b where a.code=b.code where rownum=1
不知道还需要如何该呀??

解决方案 »

  1.   

    select a.*,b.Name  from A a,B b where a.code=b.code(+) and rownum=1
    试试
      

  2.   

    select /*+ USE_NL(A,B) */ a.*,b.Name  from A a left join B b where a.code=b.code where rownum=1用use_nl试下看,效果如何?
      

  3.   

    select  top 1 a.*,b.Name  from A a left join B b where a.code=b.code where rownum=1
    select  top 1 a.*,b.Name  from A a left join B b on a.code=b.code 
    where rownum=1
      

  4.   

    --楼主:不会吧?一个SQL语句中有两个Where?????
      

  5.   

    考,着急了,写错了
    select /*+ index (表,索引名)*/  a.*,b.Name  from A a left join B b on  a.code=b.code where rownum=1
      

  6.   

    弄来半天终于弄好了执行计划,发现select  a.*,b.Name  from A a left join B b on a.code=b.code where rownum=1
    确实没走索引,但是按照 各位所讲的加 /*+ index (表,索引名)*/ ,发现也没有走那个索引,为啥呢???
      

  7.   


    你的select结果集中 数据太多了,已经占据了表的40%以上的数据了,所以不走索引走表扫描了吧!
      

  8.   

    我测试很多,用=和(+),比用join快很多,但是原理是什么不太清楚!