㈠ 定义
建立一个反向索引将把每个列的键值(each column key value)按字节反向过来,对于组合键,列的顺序被保留,但每个列的字节都作了反向
例如:
表的某一列内容
……
1234
1235
1236
1237
……
建立正向索引
……
1234
1235
1236
1237
……
这四行放在同一个leaf block中。
如果事务A查询1234这行,同时事务B查询1235这行。那么就会在这个leaf block上发生I/O争用
建立反向索引
……
4321
5321
6321
7321
……
这四行放在四个不同leaf block中
如果事务A查询1234这行,同时事务B查询1235这行。是分别在两个leaf block上进行,不会发生I/O争用
很多事务访问同一个块,对同一个块并发操作产生的I/0竞争
反向索引能作为避免热点块的一个方法
㈡ 查找
user_indexes.index_type
scott@ORCL> create index idx_rev on emp(sal) reverse;
Index created.
scott@ORCL> select index_name,index_type from user_indexes where index_name='IDX_REV';
INDEX_NAME INDEX_TYPE
------------------------------ ---------------------------
IDX_REV NORMAL/REV
㈢ 它有什么缺点?
① if you use reverse key index,index range scan will not work
② 当应用需要获取一段范围的数据时,reverse key index将不会被使用,因为键值不是连续的排列的。在这种情况下,CBO将会选择全表扫描
测试:
hr@ORCL> drop table t purge;
Table dropped.
hr@ORCL> create table t (a number,b varchar2(20));
Table created.
hr@ORCL> ed
Wrote file afiedt.buf
1 begin
2 for i in 1..20000
3 loop
4 insert into t values(i,to_char(sysdate,'yyyymmddhhmmss'));
5 commit;
6 end loop;
7* end;
hr@ORCL> /
PL/SQL procedure successfully completed.
hr@ORCL> create index idx_t on t (a) reverse;
Index created.
hr@ORCL> set autot on exp
hr@ORCL> select * from t where a >=19989 and a <=19990;
A B
---------- --------------------
19989 20130224060219
19990 20130224060219
Execution Plan
----------------------------------------------------------
Plan hash value: 1601196873
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 50 | 19 (6)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T | 2 | 50 | 19 (6)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("A">=19989 AND "A"<=19990)
Note
-----
- dynamic sampling used for this statement
hr@ORCL> drop index idx_t;
Index dropped.
hr@ORCL> create index idx_t on t (a);
Index created.
hr@ORCL> analyze index idx_t compute statistics;
Index analyzed.
hr@ORCL> select * from t where a >=19989 and a <=19990;
A B
---------- --------------------
19989 20130224060219
19990 20130224060219
Execution Plan
----------------------------------------------------------
Plan hash value: 1594971208
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 50 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T | 2 | 50 | 3 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IDX_T | 2 | | 2 (0)| 00:00:01 |
-------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("A">=19989 AND "A"<=19990)
Note
-----
- dynamic sampling used for this statement
㈣ 什么时候使用它?
反向索引主要是建立在那些以序列号生成的列上,可以将本来是连在一起的index entry分散到不同的leaf block中去
当索引是从序列中取的时候,如果是一般的b-tree 索引,在大量的插入后会导致块的分裂以及树的倾斜,使用reverse key index可以使索引段条目被更均匀的分布
所以,reverse index主要是缓解右向增长的索引右侧叶子节点的争用,对于查询意义不大,注意reverse索引可能导致无法走range scan
但用于解决被索引引起的热块问题倒是很不错的!
分享到:
相关推荐
在Oracle中,索引基本分为以下几种:B*Tree索引,反向索引,降序索引,位图索引,函数索引,interMedia全文索引 等。本文主要就前6种索引进行分析
11.1 Oracle索引概述 422 11.2 B*树索引 423 11.2.1 索引键压缩 426 11.2.2 反向键索引 429 11.2.3 降序索引 435 11.2.4 什么情况下应该使用B*树索引? 437 11.2.5 B*树小结 448 11.3 位图索引 448 11.3.1 ...
1、索引的特点1)索引是表的一部分,是可选的,表可以没有索引,就像书可以没有目录一样,数据库不做强制要求 2、索引的分类索引可分为普通索引、唯一索引、反向键索引
Oracle 11g 索引的详细解析!B-tree Index,反向索引,函数索引,bitmap 索引等等的详细介绍。
在Oracle中,索引基本分为以下几种:B*Tree索引,反向索引,降序索引,位图索引,函数索引,interMedia全文索引等,其中最常用的是B*Tree索引和Bitmap索引。(1)、与索引相关视图查询DBA_INDEXES视图可得到表中所有...
索引,包括B树索引、基于函数的索引、位图索引、反向索引、降序索引、压缩索引等的使用方法及其适用情形等。在案例精讲中,对表压缩、约束的使能与失能、表的层次结构查询、防止删除表及对象、提取创建外键约束的...
索引,包括B树索引、基于函数的索引、位图索引、反向索引、降序索引、压缩索引等的使用方法及其适用情形等。在案例精讲中,对表压缩、约束的使能与失能、表的层次结构查询、防止删除表及对象、提取创建外键约束的...
贺辞 序 前言 第1章 建立和配置数据库 1.1 数据库创建规划 1.1.1 规划以及提出正确的问题 1.1.2 怎样确定恰当的数据块尺寸 ...9.2.2 反向键索引 9.2.3 降序索引 9.2.4 索引编排表 9.2.5 管理索引的...
用来索引有趣的Capture Flag工具和其他内容的存储库。目录练习平台 网络黑客挑战: : 学习现代密码学的平台: : 反向平台: : PicoCTF: ://play.picoctf.org/login密码学 密码标识符和分析器: : 数据格式标识符...
oracle like 的优化,使用索引、反向索引
§6.2.5 步骤5:优化数据库操作 87 §6.2.6 步骤6:优化访问路径 88 §6.2.7 步骤7:优化内存分配 88 §6.2.8 步骤8:优化I/O和物理结构 89 §6.2.9 步骤9:优化资源争用 89 §6.2.10 步骤10:优化所采用的平台 89 ...
BDB是跨数据库平台的数据库设计和自动安装工具、支持Oracle、SQLServer、Access、MySQL、SQLAnyWhere数据库。 通过BDB可以快速建立数据库模型、并随时与实体数据库进行双向同步。 同时它还可以为您的应用程序创建...
§3.6.2 反向键索引 117 §3.6.3 索引组织表 117 §3.7 抽象数据类型的使用 118 §3.8 大数据类型的使用 119 §3.8.1 可用数据类型 119 §3.8.2 为LOB数据类型指定存储 120 §3.8.3 操作和检索LOB数据 121 §3.9 表...
3.反向索引 81 4.基于函数的索引 81 二. 创建索引 81 1.B树索引 81 2.位图索引 81 3.反向索引 81 4.基于函数的索引 81 三. 索引与约束 82 第十讲 视图、序列和同义词 83 一. 视图 83 1.先关概念 83 2.创建 83 ...
第三章 表及索引的定义操作 94 §3.1 建立表结构 94 §3.1.1 建立表结构命令 94 §3.1.2 建立表结构例子 96 §3.1.3 建立临时表结构 97 §3.3 修改表结构 98 §3.3.1 修改表结构命令 98 §3.3.2 修改表结构例子 99 ...
<br>此外、在BDB中提供了对开发语言的支持、 其数据库结构定义文件采用XML标准格式、 并且开放了外部读取数据库结构的源程序(C#/Delphi/JAVA)、 您可以通过使用BDB来简化软件开发和部署过程: <br>1...
<br>此外、在BDB中提供了对开发语言的支持、 其数据库结构定义文件采用XML标准格式、 并且开放了外部读取数据库结构的源程序(C#/Delphi/JAVA)、 您可以通过使用BDB来简化软件开发和部署过程: <br>1...
<br>此外、在BDB中提供了对开发语言的支持、 其数据库结构定义文件采用XML标准格式、 并且开放了外部读取数据库结构的源程序(C#/Delphi/JAVA)、 您可以通过使用BDB来简化软件开发和部署过程: <br>1...