表 t_insp_result 中估计有一百万条记录
执行以下语句:
select count(*),sum(VALUES_RMB)  from t_insp_result where goods_stat_code = '07030103';速度很慢,请问如何提高?
(已对表中的goods_stat_code字段建立索引)

解决方案 »

  1.   

    你的索引是就对goods_stat_code这一个字段吗?
    还是几个字段?
    如果是一个字段的话,我觉得你的语句速度一定不慢啊!
      

  2.   

    看一下执行计划
    是否使用了index.
      

  3.   

    对,看一下执行计划,有的时候由于ORACLE的优化器的问题建立有索引他也不能很好的利用,你还要清理下那些没有什么必要的索引
      

  4.   

    利用索引,还得看一下索引列值的选择性.
    并且不必建太多的索引.否则不如全表扫描.
    建议建这 goods_stat_code ,VALUES_RMB 复合索引.
    然后在sqlplus看计划:
    sql>set autotrace traceonly;
      

  5.   

    执行计划内容:
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
          25120  consistent gets
           9922  physical reads
              0  redo size
            630  bytes sent via SQL*Net to client
            723  bytes received via SQL*Net from client
              4  SQL*Net roundtrips to/from client
              1  sorts (memory)
              0  sorts (disk)
              1  rows processed要4秒钟啊,
    看看有没有解决的方法,在一秒钟之内搞定?
      

  6.   


    执行计划
    ----------------------------------------------------------
       0      SELECT STATEMENT Optimizer=CHOOSE
       1    0   SORT (AGGREGATE)
       2    1     TABLE ACCESS (BY INDEX ROWID) OF 'INSP_RESULT_REGISTER'
       3    2       INDEX (RANGE SCAN) OF 'REGISTER_CIQCODE_INDEX' (NON-UN
              IQUE)
      

  7.   

    OK,yangqingdelphi指的路是正确的。谢谢!