这个表中有1亿3千万条数据。检索的数据件数没有超过30%,用索引的速度,比全表检索的速度慢很多。全表检索只用0.56s,而用索引检索根本就没检索出来。有朋友能解释下为什么吗?

解决方案 »

  1.   

    我很确定他走了索引,但是,就是慢。。
    SELECT STATEMENT, GOAL = ALL_ROWS Cost=2627 Cardinality=1 Bytes=103
     SORT GROUP BY Cost=2627 Cardinality=1 Bytes=103
      NESTED LOOPS Cost=2626 Cardinality=1 Bytes=103
       NESTED LOOPS Cost=2625 Cardinality=1 Bytes=90
        MERGE JOIN Cost=2623 Cardinality=1 Bytes=75
         SORT JOIN Cost=2619 Cardinality=3 Bytes=174
          TABLE ACCESS BY GLOBAL INDEX ROWID Object owner=SB1 Object name=TP_H_SENBETSU_SHIWAKE Cost=2618 Cardinality=3 Bytes=174
           INDEX SKIP SCAN Object owner=SB1 Object name=IDX1_TP_H_SENBETSU_SHIWAKE Cost=2613 Cardinality=3
         FILTER
          SORT JOIN Cost=4 Cardinality=141 Bytes=2397
           TABLE ACCESS FULL Object owner=SB1 Object name=MP_TOKEI_KENSYU_SYOSAI1 Cost=3 Cardinality=141 Bytes=2397
        TABLE ACCESS BY INDEX ROWID Object owner=SB1 Object name=MP_TOKEI_KENSYU_GRP_KIHON1 Cost=2 Cardinality=1 Bytes=15
         INDEX RANGE SCAN Object owner=SB1 Object name=MP_TOKEI_KENSYU_GRP_KIHON1_PK Cost=1 Cardinality=1
       VIEW PUSHED PREDICATE Object owner=SB1 Cost=1 Cardinality=1 Bytes=13
        FILTER
         SORT AGGREGATE Cardinality=1 Bytes=9
          INDEX RANGE SCAN Object owner=SB1 Object name=MP_TOKEI_KENSYU_GRP_KIHON1_PK Cost=1 Cardinality=1 Bytes=9
    应该是他,可能太乱了呵呵。
      

  2.   

    INDEX SKIP SCAN 
    你的数据分布不适合跳扫,新建索引或者调整IDX1_TP_H_SENBETSU_SHIWAKE中字段的顺序
      

  3.   

    你建立了索引,用不用索引由Oracle决定。
      

  4.   

    1亿3千万条数据....检索的数据件数没有超过30%,用索引的速度,比全表检索的速度慢很多
    =================================================================
    肯定的,这么大的数据量,估计超过1%,就不会使用索引了。走索引的话,先查索引,再根据 rowid 检索主表,单条记录要查多个数据块。所以索引对 selectivity 高的查询更有效。