`
sjk2013
  • 浏览: 2183198 次
文章分类
社区版块
存档分类
最新评论

深入理解Oracle索引(5):反向索引的定义、缺点和适用场景

 
阅读更多
㈠ 定义

立一个反向索引将把每个列的键值(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索引分析与比较

    在Oracle中,索引基本分为以下几种:B*Tree索引,反向索引,降序索引,位图索引,函数索引,interMedia全文索引 等。本文主要就前6种索引进行分析

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    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 ...

    18.Oracle索引1

    1、索引的特点1)索引是表的一部分,是可选的,表可以没有索引,就像书可以没有目录一样,数据库不做强制要求 2、索引的分类索引可分为普通索引、唯一索引、反向键索引

    Oracle 索引解析

    Oracle 11g 索引的详细解析!B-tree Index,反向索引,函数索引,bitmap 索引等等的详细介绍。

    Oracle索引(B*tree与Bitmap)的学习总结

    在Oracle中,索引基本分为以下几种:B*Tree索引,反向索引,降序索引,位图索引,函数索引,interMedia全文索引等,其中最常用的是B*Tree索引和Bitmap索引。(1)、与索引相关视图查询DBA_INDEXES视图可得到表中所有...

    Oracle 10g应用指导

    索引,包括B树索引、基于函数的索引、位图索引、反向索引、降序索引、压缩索引等的使用方法及其适用情形等。在案例精讲中,对表压缩、约束的使能与失能、表的层次结构查询、防止删除表及对象、提取创建外键约束的...

    Oracle+10g应用指导与案例精讲

    索引,包括B树索引、基于函数的索引、位图索引、反向索引、降序索引、压缩索引等的使用方法及其适用情形等。在案例精讲中,对表压缩、约束的使能与失能、表的层次结构查询、防止删除表及对象、提取创建外键约束的...

    Oracle数据库管理员技术指南

    贺辞 序 前言 第1章 建立和配置数据库 1.1 数据库创建规划 1.1.1 规划以及提出正确的问题 1.1.2 怎样确定恰当的数据块尺寸 ...9.2.2 反向键索引 9.2.3 降序索引 9.2.4 索引编排表 9.2.5 管理索引的...

    CTF-s-Tools:为CTF的有用工具建立索引的存储库

    用来索引有趣的Capture Flag工具和其他内容的存储库。目录练习平台 网络黑客挑战: : 学习现代密码学的平台: : 反向平台: : PicoCTF: ://play.picoctf.org/login密码学 密码标识符和分析器: : 数据格式标识符...

    oracle like 的优化

    oracle like 的优化,使用索引、反向索引

    ORACLE9i_优化设计与系统调整

    §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 2007(for Oracle/SQLServer/MySQL/Access/SQLAnywhere) V2.1

    BDB是跨数据库平台的数据库设计和自动安装工具、支持Oracle、SQLServer、Access、MySQL、SQLAnyWhere数据库。 通过BDB可以快速建立数据库模型、并随时与实体数据库进行双向同步。 同时它还可以为您的应用程序创建...

    Oracle8i_9i数据库基础

    §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 表...

    Oracle 10g 开发与管理

    3.反向索引 81 4.基于函数的索引 81 二. 创建索引 81 1.B树索引 81 2.位图索引 81 3.反向索引 81 4.基于函数的索引 81 三. 索引与约束 82 第十讲 视图、序列和同义词 83 一. 视图 83 1.先关概念 83 2.创建 83 ...

    数据库基础 ORACLE

    第三章 表及索引的定义操作 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 ...

    数据库设计和自动安装工具BDB V2.2(for Oracle/MS SQLServer/MySQL/Access/SQLAnywhere/Sybase)

    &lt;br&gt;此外、在BDB中提供了对开发语言的支持、 其数据库结构定义文件采用XML标准格式、 并且开放了外部读取数据库结构的源程序(C#/Delphi/JAVA)、 您可以通过使用BDB来简化软件开发和部署过程: &lt;br&gt;1...

    数据库设计/自动安装工具BDB 2007 V2.3(For Oracle/MS SQLServer/Access/MySQL/SQLAnyWhere/Sybase)

    &lt;br&gt;此外、在BDB中提供了对开发语言的支持、 其数据库结构定义文件采用XML标准格式、 并且开放了外部读取数据库结构的源程序(C#/Delphi/JAVA)、 您可以通过使用BDB来简化软件开发和部署过程: &lt;br&gt;1...

    BDB 2007 V2.0 (for Oracle/SQLServer/Access/MySQL/SQLAnyWhere)

    &lt;br&gt;此外、在BDB中提供了对开发语言的支持、 其数据库结构定义文件采用XML标准格式、 并且开放了外部读取数据库结构的源程序(C#/Delphi/JAVA)、 您可以通过使用BDB来简化软件开发和部署过程: &lt;br&gt;1...

Global site tag (gtag.js) - Google Analytics