table1的执行计划是 table access full,table2是index fast full scan 
二者都是有建index,两者有何区别呢?对table1进行表分析,分析完执行计划一样是table access full。在查询table1的时候
WHERE A.CREATE_DATE >=
       TO_DATE('2012/01/11 20:00:00',
               'YYYY/MM/DD HH24:MI:SS') - 1
   AND A.CREATE_DATE <
       TO_DATE('2012/01/11 20:00:00',
               'YYYY/MM/DD HH24:MI:SS')只查询一天的资料,走的是index range scan
WHERE A.CREATE_DATE >=
       TO_DATE('2012/01/11 20:00:00',
               'YYYY/MM/DD HH24:MI:SS') - 1
   AND A.CREATE_DATE <
       TO_DATE('2012/01/15 20:00:00',
               'YYYY/MM/DD HH24:MI:SS')
若查询时间段拉长,就变成table access full了

解决方案 »

  1.   

    这个应该是oracle的SQL自优化。当你从table中查询出来的结果数量在某一个百分比范围内时,就走index。如果超过了这个范围,就直接全表扫。根据我的经验,我一般在评估建索引的依据时,这个百分比定在10%。
      

  2.   

    ORACLE的优化器会根据运行的成本来选择查询方式
      

  3.   

    这个应该是ORACLE的优化器搞的
      

  4.   

    oracle 有个参数,optimizer_index_cost_adj 他可以设定索引扫描和全表扫表的一个比例值