推测原因:原来large.[字段1]上并不存在索引,由于增加了一个条件 large.[字段1]=0 导致扫描全表;
解决方案:在large表的关键字段和large.[字段1]上建立一个索引,重新分析一下表,再执行一次看看

解决方案 »

  1.   

    select [表达式] from [大表] large ,[小表] little where large .[主键]=little.[主键] and large.[字段1]+0=0;
    试试看会不会快点
      

  2.   

    我觉得这里未见得是索引问题,RBO下应该不存在这样的问题,因为主键之间有索引,还是会用的,最后才判断条件。CBO下的话,建议你分析一下表large,再看看效果,有可能是hash join时错误判断了large.[字段1]的选择性,先filter了。
    考虑一下large.[字段1]的类型,是否不是number型的?那么就会做to_number()操作了,而且可能是对每行。
    另外,不建议你对large.[字段1]建立索引,选择性估计比较低,如果是DSS,那可以考虑建bitmap索引
      

  3.   

    你这样试试执行时间是多少
    select [表达式] from ( select * from [大表] where .[字段1]=0 ) large ,[小表] little where large .[主键]=little.[主键];
      

  4.   

    select [表达式] from [大表] large ,[小表] little where   large.[字段1]=0 andlarge .[主键]=little.[主键]
    试试这个
      

  5.   

    select [表达式] from [大表] large ,[小表] little where   large.[字段1]=0 and large .[主键]=little.[主键]
    同意楼上的,oracle好象是从最后一个判断条件开始检索,楼主的语句可能造成了表扫描
      

  6.   

    ern(与Oracle斗,其乐无穷) 说的有道理,可以先看看执行计划