大数据查询时,建立的索引无效(自定义索引使用)

背景:最近在优化某些SQL,数据量也不是很大,就几百万笔数据,但是发现针对某个时间,下了条件后,查询的数据非常慢,而且不是慢的一点点,看了下COST值,居然是全表扫描,但是针对时间栏位我明明已经做了索引,但是就是不起作用。

我们知道,针对大数据量的表,如果条件中需要根据某些字段来作为查询条件查找数据,我们通常会对那些字段建立索引,通常,如果数据量大的话,oracle会以自己优化的方式,通过我们建立的索引来查找数据,这样会使查询速度变快很多。
但是如果某些条件是经过处理的,即使用了函数,那么索引将立即失效,比如说“select * from tableName where substr(cloumnName,3,1)= ‘test’ ”,此时,如果为cloumnName设立了索引,那么实际上,如果使用切割字符串后的结果作为条件,那么oracle永远都不会使用这个索引的。

看下面的例子
可恨的德国佬在建表的时候,非要把简单的年月日时分秒记成2个栏位bearb_date和bearb_time两个栏位,前一个字段是年月日,即yyyy/mm/dd的date类型,后一个字段是那天的时间距离那天0点的秒数,是number类型,说白了也就是那天的时分秒。

所以当在以时间范围查询的时候,必须做一个转换,并且oracle还没有现成的转换函数,只能自己写一个函数,即下面的get_datetime(date,time)函数。

1.为此表的这2个字段建立索引

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值