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

深入理解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数据库中的索引管理技术.pdf

    (4)where 子句和索引:Oracle 根据用户在 where 子句中的定义找出满足查询要求的索引项(如根据一条 SQL 语句中的 where 和 and 部分指明的表列),检查可用的索引,选择能提供最快结果的索引。 (5)使用索引...

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

    visio 如何反向连接数据库生成er图

    Visio 反向连接 Oracle 数据库生成 ER 图 Visio 是一款功能强大的绘图软件,广泛应用于各种领域,包括数据库设计、软件设计、网络设计等。在数据库设计领域,Visio 可以通过反向连接数据库,生成 ER 图,从而帮助...

    藏经阁-Oracle和MySQL 性能优化感悟.pdf

    Oracle和MySQL的发展前景非常广阔,Oracle的最新版本12.2和MySQL的最新版本5.7都具有很大的发展潜力,未来将会有更多的技术创新和应用场景。 七、性能优化的反向金字塔 性能优化的反向金字塔是数据库性能优化的...

    用PowerDesigner反向工程生成E-R图

    ### 步骤5:调整E-R图 可以根据需要调整生成的E-R图,例如调整实体名称、属性名称、关系名称等。 Oracle 11g R2数据库文件默认存储位置 ------------------------------------- Oracle 11g R2数据库文件默认存储...

    Oracle的全文检索技术.doc

    5. 索引引擎提取词法分析器中的所有标记、文档段在分段器中的偏移量以及被称为非索引字的低信息含量字列表,并构建反向索引。 在使用 Oracle Text 之前,需要将正确的文本加载到数据库表中,系统默认将文档装载在...

    数据库设计软件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 表...

Global site tag (gtag.js) - Google Analytics