oracle日期字段加索引,oracle的date类型字段不能使用索引问题一则

date字段上建立了索引,但是sql语句中使用的where条件如下:

WHERE to_char(start_time,’yyyy-mm-hh hh24:mi:ss’) > ‘2009-08-01 00:00:00′ AND to_char(start_time,’yyyy-mm-hh hh24:mi:ss’) < '2009-08-31 23:59:59';

因为使用了to_char函数,造成了索引没有使用。正确的写法如下:

WHERE start_time > to_date(‘2009-08-01 00:00:00′ ,’yyyy-mm-hh hh24:mi:ss’) AND start_time < to_date('2009-08-31 23:59:59', ,'yyyy-mm-hh hh24:mi:ss');

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以下内容引自itpub论坛:

问题:

环境:AIX 4.3.3,oracle9.2RAC,表mytab共有数据15万条左右上。

在日期型字段(mydate)上建了一个索引(create index idx1 on mytab(mydate)),

可是SQL(select mydate from mytab where to_char(mydate,’yyyymmdd’)=’20040310’)根本不使用这个索引。

后来在该字段上建了一个函数索引:to_char(mydate,’yyyymmdd’)之后,该sql可以使用这个索引了,但是一旦加上order by mydate(select mydate from mytab where to_char(mydate,’yyyymmdd’)=’20040310′ order by mydate)之后,oracle又不使用索引了。真是非常困惑。

把数据倒到Redhat AS3+oracle10上,现象也很费解。建索引:create index idx1 on mytab(to_char(mydate,’yyyymmdd’)),SQL(select mydate from mytab where to_char(mydate,’yyyymmdd’)=’20040310’)和SQL(select mydate from mytab where to_char(mydate,’yyyymmdd’)=’20040310′ order by mydate)都能使用该索引。

那位大虾能解释上述现象啊?

答复:

我觉得你用to_char转换索引字段不可取

where to_char(mydate,’yyyymmdd’)=’20040310’)

可以转换

where mydate >= to_date(‘20040310′,’yyyymmdd’)

and mydate < to_date('20040311','yyyymmdd')

原帖地址:http://www.itpub.net/thread-208701-1-1.html

标签:索引

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值