反向键索引是一种B-tree索引,它在保持列顺序的同时,物理地改变每个索引键的字节(反向键索引除了ROWID和still之外,反转每个索引列的字节)。例如,如果索引键为20,如果在十六进制中存储为这个键的两个字节是C1,则是标准b树索引中的15个字节,那么一个反向键索引将字节存储为15,C1。

优点:
反转键解决了b树索引右侧叶块争用的问题。这个问题在Oracle Real Application cluster (Oracle RAC)数据库中尤其突出,在这个数据库中多个实例反复修改同一个块。例如,在orders表中,订单的主键是顺序的。集群中的一个实例添加了order 20,而另一个实例添加了21,每个实例都将其关键字写入索引右侧的同一个叶块。

在反向键索引中,字节顺序的反转分布在索引中的所有叶键上。例如,在标准键索引中相邻的20和21这样的键现在被分开存储在不同的块中(索引会在左边,中间,右边-到处都是)。所以争论就这样消失了。因此,顺序键插入的I/O分布更均匀。

缺点:
但是,必须指出的是:现在整个索引最好在缓冲区缓存中,而在之前——只有热的右侧需要在缓存中进行有效的插入。如果索引不能放入缓存,我们很可能会将缓冲区繁忙的等待变成物理IO等待,这可能更糟(补救比症状更糟糕)。

由于索引中的数据在存储时没有按列键排序,所以反向键安排在某些情况下消除了运行索引范围扫描查询的能力。例如,如果用户对大于20的订单ID发出查询,那么数据库就不能从包含该ID的块开始,然后水平地通过叶块进行。

总结:
这些索引旨在消除插入应用程序上的索引热点。这些索引对于插入性能非常好,但是它们是有限的,因为数据库不能使用它们进行索引范围扫描。

语法:
create index <INDEX_NAME> on <TABLE_NAME> (<COLUMN_NAME>, <COLUMN_NAME>)
REVERSE;

参考:What Are Reverse Key Indexes? (文档 ID 1070627.6)

oracle之 反向键索引的更多相关文章

  1. oracle 数据库 主键索引重建

    oracle 数据库 主键索引重建 alter table table_name drop primary key; alter table table_name add constraint pk_ ...

  2. Oracle的几种索引

    Oracle 提供了多种不同类型的索引以供使用.简单地说, Oracle 中包括如下索引: 1. B* 树索引 这些是我所说的 “ 传统 “ 索引.到目前为止,这是 Oracle 和大多数其他数据库中 ...

  3. sql(Oracle)优化之索引

    原文:https://www.cnblogs.com/oraclestudy/articles/5779210.html 建立索引的目的是:l 提高对表的查询速度:l 对表有关列的取值进行检查. 注意 ...

  4. Oracle删除主键约束的同时删除索引

    继续昨天的折腾(Oracle修改主键约束),删掉主键约束后,发现唯一索引并未删掉.仔细看了下,主键约束跟唯一索引名称不一样,这说明是先创建了唯一索引,后创建的主键约束.我们来试验下: SQL> ...

  5. 类型:Oracle;问题:oracle 查询表详细信息;结果:oracle查询表信息(索引,外键,列等)

    oracle查询表信息(索引,外键,列等) oracle中查询表的信息,包括表名,字段名,字段类型,主键,外键唯一性约束信息,索引信息查询SQL如下,希望对大家有所帮助: 1.查询出所有的用户表sel ...

  6. Oracle复合B*tree索引branch block内是否包含非先导列键值?

    好久不碰数据库底层细节的东西,前几天,一个小家伙跑来找我,非要说复合b*tree index branch block中只包含先导列键值信息,并不包含非先导列键值信息,而且还dump了branch b ...

  7. 【Oracle学习笔记】索引

    1 简介 1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引.在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息. ...

  8. 1226关于count(*)不走主键索引反而走二级索引

    转自 http://www.2cto.com/database/201508/433975.html mysqlcount(*)会选哪个索引? 2015-08-19      0个评论    来源:D ...

  9. 深入学习Oracle分区表及分区索引

    关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类: •       Range(范围)分区 •       Has ...

随机推荐

  1. Gym - 100971J (思维+简单bfs)

    题目链接:http://codeforces.com/gym/100971/problem/J J. Robots at Warehouse time limit per test 2.0 s mem ...

  2. Spring学习五(JDBC支持)

    Spring的jdbc支持 1配置db.properties,将有关JDBC的信息载入 2bean文件配置数据源,这里用e3p0作为数据源载入db.properties 3配置template的bea ...

  3. python 时间戳转换格式

    1.简介 在编写代码时,往往涉及时间.日期.时间戳的相互转换. 2.示例 # 引入模块 import time, datetime 2.1 str类型的日期转换为时间戳 1 # 字符类型的时间 2 t ...

  4. 2019-03-06-day005-字典操作

    情商 别人与你相处感觉很轻松. ?为人处世,有笑点. 照顾对方的情绪. 与别人相处可以很好地解决问题. 你身边总有那么一两个人,别人都喜欢与他交往,和他在一起,很舒服. 情商后天可以提升的. 1,你本 ...

  5. Python 数据共享

    import time from multiprocessing import Process,Manager,Lock # a = 10 # # tmp = a # # tmp -= 1 # # a ...

  6. tomcat多实例的端口设置

    需要改4个端口 8080  8009 8005 8443 8080改成8081 8005改成8105 8009改成8109 8443 改成8543

  7. golang 3des/ecb/cbc/pkcs5 加解密

    本人新手,参考文档: http://blog.studygolang.com/2013/01/go%E5%8A%A0%E5%AF%86%E8%A7%A3%E5%AF%86%E4%B9%8Bdes/ h ...

  8. xdoj-1022-A simple math problem 2 // 太强了

    //其实题目中f[n]的值可理解为存在多少个整数对使a*b<=n #include<cstdio> #define N 1007 #define maxn 1000005 using ...

  9. Uva 816 Abbott's Revenge(BFS)

    #include<cstdio> #include<cstring> #include<vector> #include<queue> using na ...

  10. poj1504 Adding Reversed Numbers

    Adding Reversed Numbers Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17993 Accepted: 9 ...