REVERSE关键字之REVERSE索引
昨天说到REVERSE关键字可以指REVERSE函数和REVERSE索引,简单介绍了下REVERSE函数的含义,今天简单整理下REVERSE索引。
REVERSE索引也是一种B树索引,但它物理上将按照列顺序保存的每个索引键值进行了反转。例如,索引键是20,用16进制存储这个标准B树索引键的两个字节是C1,15,那么反向索引存储的字节就是15,C1。
反向索引主要解决的是叶子块的争用问题。在RAC中,这个问题更加明显,可能多实例反复修改同一个块。举个例子,在一张按照主键顺序存储的表中,一个实例增加记录20,另一个增加21,这两个值的键存储于同一个索引叶子块的左右两侧。
在反向索引中,插入操作会被反序字节排列分发到索引的全部叶子键中。就像上面的例子,20和21两个键,在标准键索引中,他们应该是相邻的,但在反向索引中,他们会被分开存储。因此按顺序键插入操作的IO会更加平均。
因为索引上的数据不是按照列存储的顺序,反向索引会禁止一些案例中可以用到的索引范围扫描。例如,如果一个用户查询ID值大于20的记录,那么数据库不能从包含这个ID的块开始查找,而是从所有的叶子块。
这种索引的设计目的是消除插入操作的索引热点。对于插入的性能提升有帮助,但也是有限的,因为数据库不能使用索引范围扫描了。
-----摘自MOS《1352477.1》
Oracle8引入了反向索引。反向索引会逆序排列每个索引列的字节,除了ROWID,但仍旧会保持列的顺序。反向索引适用于Oracle Parallel Server环境。(补充:这里就是Oracle8中著名的OPS)
在OPS环境中,索引的修改主要集中于一小部分叶子块。索引的反向键值排列可以让插入操作分布到索引的所有叶子键。反向键值索引禁止查询使用索引范围扫描,因为字典次序相邻的键不会在索引中相邻排列。反向键值索引也适用于按升序插入值,删除最早记录的情况,因此可以防止索引的倾斜。
创建反向键值索引的语法:
create index <INDEX_NAME> on <TABLE_NAME> (<COLUMN_NAME>, <COLUMN_NAME>) REVERSE;
create index i_emp on emp (emp#,mgr#) reverse
如果要检查一个索引是否是反向键值索引,可以查看ind$视图的属性列:
0x04代表反向索引:
SQL> select obj#, dataobj#, type#, property from ind$ where ts#=2;
OBJ# DATAOBJ# TYPE# PROPERTY
---------- ---------- ---------- ----------
24051 24051 1 1
24053 24053 1 1
24071 24071 1 4 <--- Reverse index
-----摘自MOS《1070627.6》
补充:这里可以看到反向索引是从ind$系统表查询的,这个系统表存储的是所有用户索引对象的信息,不是我们经常使用的user_indexes或dba_indexes视图,dba_indexes字典视图的基础数据表是ind$基表。
REVERSE关键字之REVERSE索引的更多相关文章
- Reverse Key Indexes反向索引
Reverse Key Indexes反向索引A reverse key index is a type of B-tree index that physically reverses the by ...
- [Linked List]Reverse Linked List,Reverse Linked List II
一.Reverse Linked List (M) Reverse Linked List II (M) Binary Tree Upside Down (E) Palindrome Linked ...
- [LeetCode] 344 Reverse String && 541 Reverse String II
原题地址: 344 Reverse String: https://leetcode.com/problems/reverse-string/description/ 541 Reverse Stri ...
- LeetCode之“链表”:Reverse Linked List && Reverse Linked List II
1. Reverse Linked List 题目链接 题目要求: Reverse a singly linked list. Hint: A linked list can be reversed ...
- (reverse) Text Reverse hdu1062
Text Reverse Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- 攻防世界 reverse 进阶 10 Reverse Box
攻防世界中此题信息未给全,题目来源为[TWCTF-2016:Reverse] Reverse Box 网上有很多wp是使用gdb脚本,这里找到一个本地还原关键算法,然后再爆破的 https://www ...
- mysql 索引 create_time 加explain关键字是否走索引
SELECT * FROM t_user WHERE email='217@xxg.com'; --1.725 --加email索引之后 0.003 SELECT * FROM t_user WHE ...
- ORACLE 索引概述
索引是数据库中一种可选的数据结构,她通常与表或簇相关.用户可以在表的一列或数列上建立索引,以提高在此表上执行 SQL 语句的性能.就像本文档的索引可以帮助读者快速定位所需信息一样,Oracle 的索引 ...
- 正向代理 forward proxy、反向代理 reverse proxy、透明代理 transparent proxy
https://zh.wikipedia.org/wiki/反向代理 反向代理在计算机网络中是代理服务器的一种.服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后 ...
随机推荐
- [转] ubuntu 一些常用软件的安装
首先说明一下 ubuntu 的软件安装大概有几种方式: 1. deb 包的安装方式deb 是 debian 系 Linux 的包管理方式, ubuntu 是属于 debian 系的 Linux 发行版 ...
- Java操作属性文件,支持新增或更新多个属性
Java操作属性文件.支持新增或更新多个属性 一.更新或新增单个属性的方法 /** * 写入properties信息 * @param filePath 绝对路径(包含文件名称和后缀名) * @par ...
- Android开发(20)--RadioGroup的使用
RadioGroup 有时候比較实用.主要特征是给用户提供多选一机制. MainActivity.java package com.example.lesson16_radio; import and ...
- CentOS 6.5 升级内核 kernel
本文适用于CentOS 6.5, CentOS 6.6,亲测可行,估计也适用于其他Linux发行版. 1. 准备工作 1.1 下载源码包 Linux内核版本有两种:稳定版和开发版 ,Linux内核版本 ...
- Oracle数据库的创建与验证
创建数据库,输入命令dbca创建数据库 会弹出创建数据库相应的对话框 单击下一步 选择创建一个数据库,并单击下一步 数据库模板选择一般目的的转换过程即可.单击下一步 全局数据库名称和SID名称,要和上 ...
- WebDAV被启用(转)
WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1,在GET.POST. ...
- spark-shell启动集群
使用spark-shell 启动spark集群时的流程简析: spark-shell->spark-submit->spark-class 在sprk-class中根据条件会从不同的入口 ...
- 实现VS2010整合NUnit进行单元测试
1.下载安装NUnit(最新win版本为NUnit.3.2.1.msi) http://www.nunit.org/index.php?p=download 2.下载并安装VS的Visual Nuni ...
- UVa 679 小球下落 简单模拟题,树
题目大意:给你一个完全二叉树,并且给他们编号,编号规则为左子树为2*k,右子树为2*k+1,每一个节点 上都有一个开关,初始时开关都处于关闭状态,小球碰到节点就会改变该点的开关的状态.然后给你I个小球 ...
- poj3614 贪心
Sunscreen Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6410 Accepted: 2239 Descrip ...