select fpex.* from F ,
d d 
where  f.org_id=d.org_id
and f.stat_date>=to_date('2010-01-01','yyyy-mm-dd')
and f.stat_date<=to_date('2010-03-31','yyyy-mm-dd')
and d.troop_name='三部'
f表对stat_date建有索引,f表是通过stat_date进行分区的,d表对org_id建有索引
现在这个sql不执行索引,不太明白为什么,请高手给分析下!

解决方案 »

  1.   

    select f.* from F ,
    d  
    where f.org_id=d.org_id
    and f.stat_date>=to_date('2010-01-01','yyyy-mm-dd')
    and f.stat_date<=to_date('2010-03-31','yyyy-mm-dd')
    and d.troop_name='三部'
    sql是这样,上面可能有的地方没改好
      

  2.   


    对相关表做下分析,在看看:
    analyze table tablename compute statistics;Oracle 10g Statistic数据统计 
    http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4668723.aspx------------------------------------------------------------------------------ 
    Blog: http://blog.csdn.net/tianlesoftware 
    网上资源: http://tianlesoftware.download.csdn.net 
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx 
    DBA1 群:62697716(满); DBA2 群:62697977
    DBA3 群:63306533;     聊天 群:40132017
      

  3.   

    CBO模式下走索引不光是存在就走,而同时要看数据分布,选择性查的话,还是走全表的
      

  4.   

    f 表有没有org_id索引?漏了?
      

  5.   

    但是,我单独select f.* from F   
    where  f.stat_date>=to_date('2010-01-01','yyyy-mm-dd')
    and f.stat_date<=to_date('2010-03-31','yyyy-mm-dd')这样执行,也不走索引,难道查找范围数据,索引不起作用?
      

  6.   

    如果说,我分区是以stat_date字段6个月一分区,也就是1月到3月会在一个分区中,那这样是不是因为查了比较大的数据而不走索引呢?
      

  7.   

    按数据优化理论来说,查找过多的数据,不走索引,速度会快的~~
    不一定是什么时候用索引都是最快的~
    所以ORACLE优化器有时候不一定执行索引扫描——
    你居然把表分区了,尽管是全表扫描,都不会太慢~
    而且表分区应该是分布在各个磁盘上的,分区的数量与服务器CPU有关。
      

  8.   

    f 表有没有org_id索引,一定要建个索引,否则d 跟f表关联导致d表不走索引。
      

  9.   

    使用查询提示,强制使用索引select /*+ index(table.column) */