Oracle中建立时间字段索引后衍生出来的问题


       默认的大家可能都认为字段上加了函数,索引都会失效,然而也有特殊情况。

       我就讲讲我遇到的问题吧,希望有大佬后续讲其中的奥秘。

       我在时间字段created_time上创建了普通索引,然后做百万级表关联查询的时间,加上时间区间去查看某一个时间段的数据并根据时间降序排序。Oracle库中时间字段created_time定义的类型为Date类型,我在用条件created_time between to_date('2020-07-01','yyyy-MM-dd') and to_date('2020-08-01','yyyy-MM-dd')查询时,看了执行计划,然而并没有走索引,而且查询时间用了3s多,初步排查下来是因为查询区间的数据量过大导致不走索引,然后我缩小时间区间,确实走索引了,查看执行计划索引的扫描策略为RANGE SCAN,但是感觉并没有快多少。

       紧着我改了下查询语句,使用了函数对created_time字段处理,如to_char(created_time,'yyyy-MM-dd') between '2020-07-01' and '2020-08-01',查看执行计划也使用到索引了,索引的扫描策略为FULL SCAN DESCENDING然后再看下执行时间,直接变成0.05s,简直不可思议。

       目前排查下来我的总结就是:Oracle中如果索引扫描策略为FULL SCAN DESCENDING的查询语句比索引扫描策略为RANGE SCAN快。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM