在birthday上建索引,
select * from birthday where sysdate-to_date(birthday,'yyyymmdd') between 8001 and 9999;

解决方案 »

  1.   

    birthday 这样的表不会太大吧? 全表扫描也无所谓了.
      

  2.   

    sorry,这里我只是举个例子。实际开发中,是一个日期,其他还有别的字段,数据量大概是十万级
      

  3.   

    如果表你只能读,无法建索引,并且原先也没有按BIRTHDAY字段建索引,那么那个语句不大可能再优化了。
    反之,如果存在按BIRTHDAY字段的索引,或着可以建立按BIRTHDAY字段的索引,那么那个语句可以写成
    select * from birthday where birthday between to_char(sysdate-9999,'yyyymmdd') and to_char(sysdate-8001,'yyyymmdd');
      

  4.   

    注意BETWEEN的效率问题,不如用<和>