首先对CONSUME_DATE建立索引:
create index idx_consume_date
    on consume (consume_date);
其次,修改查询的SQL,不要对字段进行函数操作:
select * from consume
 where consume_date between to_date('20010101','yyyymmdd')
   and to_date('20011231','yyyymmdd');

解决方案 »

  1.   

    KingSunSha(弱水三千):
    使用BETWEEN好象比较慢,不如直接进行比较:
    select * from consume
     where consume_date >= to_date('20010101','yyyymmdd') and
           consume_date <= to_date('20011231','yyyymmdd');
      

  2.   

    qiuyang_wang:
    恭喜升红星了!好像BETWEEN的算法和使用>= + <=是一模一样的,以前的教科书上是这么说的.难道改了吗?
      

  3.   

    between在执行时变为>= <=
      

  4.   

    date类型是带时间的,而to_date('20010101','yyyymmdd')产生的时间是缺省的,这样在执行SQL的结果与to_char是不同的,是吧
      

  5.   

    to_date是将字符串转换为日期型的,而to_char是转换成字符型的,字符串和日期没法进行比较