Oracle反向主键

时间:2017-11-06 19:45:23

标签: oracle indexing reverse

我正在尝试在主键列上创建一个带有反向索引的表。

创建了表,我插入了大量数据,生成了带序列的键值。

根据我对反向键的理解,关于它如何获得nextval并将其反转,然后插入...我期望在我的select语句中看到键值反转。

如果nextval是112,当我从表格中选择时,我期待看到211.但我仍然看到112.

它是否仍在实现反向键索引,而Oracle只是以非反转格式显示?

或者实际上是错误的?

用于索引的SQL是

CREATE UNIQUE INDEX "<schema>"."<index_name>" ON "<schema>"."<table_name>" ("SYS_I") REVERSE;

1 个答案:

答案 0 :(得分:5)

反向键索引不会更改键值 仅更改存储在磁盘上的物理表示 来自the documentation

  

反向键索引

     

反向键索引是一种B树索引,它在物理上反转每个索引键的字节,同时保持   列顺序。例如,如果索引键是20,如果是两个   以十六进制存储的此键的字节数是标准中的C1,15   B树索引,然后是反向键索引,将字节存储为15,C1。

     

反转键解决了叶块争用的问题   B树索引的右侧。这个问题可能特别严重   在Oracle Real Application Clusters(Oracle RAC)数据库中   多个实例重复修改同一个块。例如,在   订单表订单的主键是顺序的。一   集群中的实例添加了20个订单,而另一个添加了21个   每个实例将其密钥写入右侧相同的叶块   指数的一面。

     

在反向键索引中,字节顺序的反转分布   插入索引中的所有叶键。例如,键等   在标准密钥索引中相邻的20和21是   现在分开存放在不同的块中。因此,I / O用于插入   顺序键分布更均匀。

     

因为索引中的数据没有按列键排序   存储后,反向键排列消除了运行的能力   索引范围扫描查询在某些情况下。例如,如果是用户   发出订单ID大于20的查询,然后数据库不能   从包含此ID的块开始并水平继续   通过叶块。