以下是SQL以及执行计划:  SQL Statement from editor:
   
   
select a.putmeddetailid_chr
    from t_bih_opr_putmeddetail a
   where (a.create_dat between timestamp '2009-6-4 00:00:00'
                           and timestamp '2009-6-4 23:59:59'
         )
     and a.medstoreid_chr = '0000066'
  ------------------------------------------------------------
    
  Statement Id=4203132   Type=
  Cost=2.64022111505165E-308  TimeStamp=04-06-09::15::28:22
  
       (1)  SELECT STATEMENT  ALL_ROWS 
     Est. Rows: 589  Cost: 3,837
       (2)  TABLE TABLE ACCESS FULL ICARE.T_BIH_OPR_PUTMEDDETAIL  [Analyzed] 
       (2)   Blocks: 19,421 Est. Rows: 589 of 371,198  Cost: 3,837 
     Tablespace: ICARE_IDXt_bih_opr_putmeddetail.create_dat已经建立索引了,时间范围一天,没有数据,却是全表的扫描。怎么解决。

解决方案 »

  1.   

    (1)  SELECT STATEMENT  ALL_ROWS Est. Rows: 589  Cost: 3,837
    ==================================================================
    6 百行数据,最多也就几个 data block,不用索引可能会更快。 
      

  2.   

    create_dat不是时间类型吗,这应该跟数据类型有关,你不是时间类型,建立索引不是按时间排序
      

  3.   

    时间标签timestamp和日期类型date不同. 
    你这种处理方式导致oracle先要对表中的记录进行隐式转换成timestamp类型, 所以索引无效.
    将between timestamp '2009-6-4 00:00:00'  and ...
    换成 between to_date('2009-6-4 00:00:00'  ,'YYYYMMDD')试试