加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle索引1--B树索引倒序扫描

发布时间:2020-12-12 15:18:32 所属栏目:百科 来源:网络整理
导读:Oracle索引1--B树索引倒序扫描 在日常工作中会遇到某些查询,需要将最晚时间点数据显示在前面,然而这个表的数据量比较大可能是100G,500G,甚至更大,此时如果使用常规的order肯定查询不出来,Oracle提供了索引倒序扫描,然后能快速查询出结果集。 为什么倒

Oracle索引1--B树索引倒序扫描

在日常工作中会遇到某些查询,需要将最晚时间点数据显示在前面,然而这个表的数据量比较大可能是100G,500G,甚至更大,此时如果使用常规的order肯定查询不出来,Oracle提供了索引倒序扫描,然后能快速查询出结果集。 为什么倒序扫描会比较快,实际很简单,当数据插入进表时,oracle已经为索引键值排好序了(前导列排序),从左往右是按小到大排序的,那么一般扫描索引时也是从左往右扫描的,当需要将最大的时间数据在前面显示时几乎需要将整个索引全部扫描(有时会自动倒序扫描),这样IO肯定吃不消,效率很低。 那么,只能倒序扫描了。
写法很简单,只需要使用hint就行了,如:

select * from ( select * from ( select /* index_desc(t,索引名称)*/ t.*,rownum rn from table_name t where t.time_ > xxx and t.time_ < xxx) where rn < 100) where rn > 50;
这是Oracle的分页写法,应该是比较标准的,分页一般就是这么写法。
另一种方式就是创建一个倒序索引,如: create index t_idx on table_name(time_ desc,name_); 这种创建时,索引最左边的值就是最晚的时间插入的数据,好像数据就是往左增长一样,此时索引从左往右扫描的时候就是最大的时间了,也是比较实用的。
具体例子不在阐述,知道原理就行了,使用这种特性解决了大表的查询慢问题。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读