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_); 这种创建时,索引最左边的值就是最晚的时间插入的数据,好像数据就是往左增长一样,此时索引从左往右扫描的时候就是最大的时间了,也是比较实用的。 具体例子不在阐述,知道原理就行了,使用这种特性解决了大表的查询慢问题。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- iphone – CALayerInvalidGeometry’,原因:’CALayer边界包
- postgresql如果查询出的数据为空,则设为0的方法
- c# – 经过身份验证的WCF:获取当前安全上下文
- ruby – 倾斜模板片段
- reactjs – 使用没有标签的JSX?
- react-native – 从本机应用程序打开外部应用程序
- c# – Webbrowser禁用所有音频输出 – 从在线广播到YouTube
- 手动调用ajax更新yii中的list view
- ruby-on-rails-3.2 – 为什么carmen-rails没有默认保存状态
- ios – UIScrollView无法以编程方式使用Autolayout(使用多个