Cod*_*ard 1 oracle indexing reverse
我试图在我的主键列上创建一个带有反向索引的表.
该表已创建,我已插入大量数据,生成带序列的键值.
根据我对反向键的理解,关于它如何获得nextval并将其反转,然后插入...我期望在我的select语句中看到键值反转.
如果nextval是112,当我从表中选择时,我期待看到211.但我仍然看到112.
它是否仍在实现反向键索引,而Oracle只是以非反转格式显示?
或者实际上是错的?
我用于索引的SQL是
CREATE UNIQUE INDEX "<schema>"."<index_name>" ON "<schema>"."<table_name>" ("SYS_I") REVERSE;
反向键索引不会更改键值.
仅更改存储在磁盘上的物理表示.
从文档中
反向键索引
反向键索引是一种B树索引,它在保持列顺序的同时物理地反转每个索引键的字节.例如,如果索引键是20,并且如果在十六进制中为该键存储的两个字节在标准B树索引中是C1,15,则反向键索引将字节存储为15,C1.
反转键解决了B树索引右侧的叶块争用问题.在Oracle Real Application Clusters(Oracle RAC)数据库中,此问题尤为严重,其中多个实例会反复修改同一个块.例如,在订单表中,订单的主键是顺序的.集群中的一个实例添加了20个订单,而另一个实例添加了21个,每个实例将其密钥写入索引右侧的同一个叶块.
在反向键索引中,字节顺序的反转在索引中的所有叶键上分配插入.例如,在标准密钥索引中相邻的诸如20和21之类的密钥现在相隔很远地存储在单独的块中.因此,用于插入顺序键的I/O更均匀地分布.
由于索引中的数据在存储时未按列键排序,因此反向键排列在某些情况下无法运行索引范围扫描查询.例如,如果用户发出的订单ID大于20的查询,则数据库无法以包含此ID的块开头,而是水平遍历叶块.
| 归档时间: |
|
| 查看次数: |
311 次 |
| 最近记录: |