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服务器)上获取资源,然后 ...
随机推荐
- JDBC中Statement接口提供的execute、executeQuery和executeUpdate之间的区别
Statement 接口提供了三种执行 SQL 语句的方法:executeQuery.executeUpdate 和 execute.使用哪一个方法由 SQL 语句所产生的内容决定. 方法execut ...
- poj 2718 Smallest Difference(穷竭搜索dfs)
Description Given a number of distinct , the integer may not start with the digit . For example, , , ...
- Linux下PHP安装配置MongoDB数据库连接扩展
Web服务器: IP地址:192.168.21.127 PHP安装路径:/usr/local/php 实现目的: 安装PHP的MongoDB数据库扩展,通过PHP程序连接MongoDB数据库 具体操作 ...
- iPhone应用提交流程:如何将App程序发布到App Store?
对于刚加入iOS应用开发行列的开发者来说,终于经过艰苦的Coding后完成了第一个应用后最重要的历史时刻就是将应用程序提交到iTunes App Store.Xcode 4.2开发工具已经把App提交 ...
- VB.NET中DataGridView控件
VB.NET中对于表格数据的显示经常使用到DataGridView控件,其以丰富多样的数据表呈现形式被程序猿喜爱. 本人在做一个小系统中运用DataGridView控件的部分属性,这些功能的使用在使用 ...
- [Unit Testing] Based on input value, spyOn function
describe( 'Forgot Password: with username', ()=> { let dirElementInput; beforeEach( ()=> { // ...
- IOS-沙盒机制(一 简述)
一 IOS沙盒机制 出于安全的目的,应用程序仅仅能将自己的数据和偏好设置写入到几个特定的位置上.当应用程序被安装到设备上时,系统会为其创建一个家文件夹,这个家文件夹就是应用程序的沙盒.所以 ...
- python网络编程之socket
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- 如何把java代码转换成smali代码
1.概述 Smali是Android系统中Dalvik虚拟机指令语言,在apk逆向过程中有许多工具可以把smali代码转化成java代码.但是在学习Smali语法的过程中,有时候需要进行java代码和 ...
- EF中的约定
优先级:Fluent API >数据注释>约定 CodeFirst约定 主键约定 如果类的属性名为"ID"(不区分大小写)或类名的后面跟有"ID", ...