`
dahai639
  • 浏览: 15010 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

oracle 反向索引

阅读更多

反向索引就是将正常的键值头尾调换后再进行存储,比如原值是“1234”,将会以“4321”形式进行存储,这样做可以高效地打散正常的索引键值在索引叶块中的分布位置。

1. 反向索引应用场合
1)发现索引叶块成为热点块时使用
通常,使用数据时(常见于批量插入操作)都比较集中在一个连续的数据范围内,那么在使用正常的索引时就很容易发生索引叶子块过热的现象,严重时将会导致系统性能下降。
2)在RAC环境中使用
当RAC环境中几个节点访问数据的特点是集中和密集,索引热点块发生的几率就会很高。如果系统对范围检索要求不是很高的情况下可以考虑使用反向索引技术来提高系统的性能。因此该技术多见于RAC环境,它可以显著的降低索引块的争用。

2.使用反向索引的优点
最大的优点莫过于降低索引叶子块的争用,减少热点块,提高系统性能。

3.使用反向索引的缺点
由于反向索引结构自身的特点,如果系统中经常使用范围扫描进行读取数据的话(例如在where子句中使用“between and”语句或比较运算符“>”“<”等),那么反向索引将不适用,因为此时会出现大量的全表扫描的现象,反而会降低系统的性能。

4.通过一个小实验简单演示一下反向索引的创建及修改
1)创建一个实验表T
sec@ora10g> create table t (x int);

Table created.

2)创建反向索引,在正常创建索引的语句后面简单的加上“reverse”关键字即可。
sec@ora10g> create index idx_t on t(x) reverse;

Index created.

3)使用user_indexes视图查看一下索引的类型,“NORMAL/REV”表示该索引类型为反向索引。
sec@ora10g> col TABLE_NAME for a10
sec@ora10g> col INDEX_NAME for a10
sec@ora10g> select table_name, index_name, index_type from user_indexes where table_name = 'T';

TABLE_NAME INDEX_NAME INDEX_TYPE
---------- ---------- ---------------
T          IDX_T      NORMAL/REV

4)修改反向索引为正常索引
当反向索引无法满足我们的需求的时候,我们可能会考虑修改反向索引为正常的索引结构。
除了删除索引重新创建这种方法外,可以直接使用noreverse选项重新rebuild索引。
sec@ora10g> alter index idx_t rebuild noreverse;

Index altered.

5)最后确认一下,该索引已经修改为正常的索引。
sec@ora10g> select table_name, index_name, index_type from user_indexes where table_name = 'T';

TABLE_NAME INDEX_NAME INDEX_TYPE
---------- ---------- ---------------
T          IDX_T      NORMAL

5.Oracle 10gR2官方文档有关反向索引的描述。可谓“清澈见底”。
http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/schema.htm#sthref998

Reverse Key Indexes

Creating a reverse key index, compared to a standard index, reverses the bytes of each column indexed (except the rowid) while keeping the column order. Such an arrangement can help avoid performance degradation with Real Application Clusters where modifications to the index are concentrated on a small set of leaf blocks. By reversing the keys of the index, the insertions become distributed across all leaf keys in the index.

Using the reverse key arrangement eliminates the ability to run an index range scanning query on the index. Because lexically adjacent keys are not stored next to each other in a reverse-key index, only fetch-by-key or full-index (table) scans can be performed.

Sometimes, using a reverse-key index can make an OLTP Real Application Clusters application faster. For example, keeping the index of mail messages in an e-mail application: some users keep old messages, and the index must maintain pointers to these as well as to the most recent.

The REVERSE keyword provides a simple mechanism for creating a reverse key index. You can specify the keyword REVERSE along with the optional index specifications in a CREATE INDEX statement:

CREATE INDEX i ON t (a,b,c) REVERSE;

You can specify the keyword NOREVERSE to REBUILD a reverse-key index into one that is not reverse keyed:

ALTER INDEX i REBUILD NOREVERSE;


Rebuilding a reverse-key index without the NOREVERSE keyword produces a rebuilt, reverse-key index.

6.小结
可以充分发挥反向索引减少索引热点块的优势对系统进行调优,不过反向索引本身的结构特点也限定了它的应用范围。因此需要具体问题具体分析,实施前做好充分的测试。

本篇文章来源于:开发学院 http://edu.codepub.com   原文链接:http://edu.codepub.com/2010/0429/22435.php

分享到:
评论

相关推荐

    09 oracle的索引 PPT

    - Reverse索引:反向键索引,用于存储数据的反向副本,提高某些查询性能。 - Unique索引:确保列中的值是唯一的。 - Index-Organized Table (IOT):索引组织表,数据直接存储在索引结构中。 二、索引的优点与...

    oracle的索引学习

    在Oracle中,常见的索引类型有B树索引、位图索引和反向键索引。B树索引适用于经常进行单行或范围查询的列,它们提供高效的查找性能。位图索引则适用于低基数(即不同值较少)的列,或者在进行多列组合查询时,可以将...

    Oracle索引分析与比较

    本篇文章将深入探讨Oracle中的B*Tree索引、反向索引、降序索引、位图索引和函数索引。 1. **B*Tree索引**: - B*Tree索引是Oracle中最常见的索引类型,其结构类似于二叉树,可以高效地处理高基数数据列,即具有...

    oracle索引类型及扫描方式大整理new

    例如,在进行范围查询(`WHERE column &gt; value`)时,由于反向索引的叶块中键值并未按顺序排列,因此无法通过简单的区域扫描完成检索,这限制了其在某些查询类型中的应用。 #### 三、降序索引:针对逆向排序查询的...

    oracle rac环境下索引热块的处理思路

    Oracle RAC 环境下索引热块的处理思路...在 Oracle RAC 环境下,索引热块争用的处理思路需要考虑到多实例并发 insert 表和多实例并发查询导致的索引热块争用,并 采用反向索引和按实例分区表等方法来缓解索引热块争用。

    oracle索引,常见索引问题

    Oracle数据库中的索引是优化查询性能的关键工具,它允许快速定位和访问数据。常见的索引类型包括B*树索引和位图索引,每种都有其特定的应用场景和优势。 1. **B*树索引**:这是最常见的索引类型,类似于二叉树结构...

    Oracle Index 索引介绍

    反向索引主要应用于长文本字段,如CLOB和NCLOB,将索引键的最后一个字节作为第一个字节存储,提高查询性能。 4. **函数索引(Function-Based Index)** 允许基于列的函数结果创建索引,使得对函数的结果进行查询...

    Oracle索引优化

    在Oracle数据库中,索引的种类繁多,包括B*Tree索引、反向索引、降序索引、位图索引和函数索引等。理解并正确使用这些索引类型对于提升查询性能至关重要。 首先,B*Tree索引是最常见的索引类型,适用于大部分常规...

    oracle索引的建立、修改、删除.doc

    Oracle 索引的建立、修改、删除 Oracle 索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。在数据库设计阶段与数据库结构时就要考虑。应用系统的性能直接与索引的建立...

    高效ORACLE之索引(完整).pdf

    反向键索引(Reverse Key Index):反向键索引是B*树索引的一种特殊形式,其键值顺序被反转。例如,对于数值键值,最高位被存储在叶节点的最低位置,最低位则存储在最高位置。这种方式有助于减少键值冲突,特别是...

    Oracle优化全攻略一【Oracle 索引概念】.docx

    在Oracle数据库中,常见的索引类型包括B*Tree索引、反向索引、降序索引、位图索引、函数索引以及interMedia全文索引。B*Tree索引是最常见的一种,适用于大部分常规查询场景;反向索引则主要用于长文本字段,降低存储...

    基于Oracle数据库索引的查询优化研究.pdf

    在Oracle实时应用集群中,尤其是在值连续增长的列上,反向索引表现出色。 2.3 位图索引 位图索引适用于列值较少的情况,它为每个可能的列值创建一个位图,使用位元表示对应行是否包含该值。位图索引能够节省空间,...

    oracle索引类型及扫描方式大整理

    反向索引是B*Tree索引的一种变体,它通过反转字节来实现更均匀的索引分布,降低竞争。 2. **降序索引**:8i版本后引入,专为降序排序的查询设计,使得逆序查找更为高效。 3. **位图索引**:主要用于OLAP(在线分析...

    Oracle数据库中的索引管理技术.pdf

    Oracle 8i 支持几种不同类型的索引以满足许多类型的应用程序的需求,其中包括 B-树(标准)索引、反向键索引、位图索引、索引编排表和基于函数的索引。这些索引都是基于表列创建的各种类型的索引。 (1)标准(B-树...

    oracle-索引[定义].pdf

    本文将详细解析Oracle中的几种主要索引类型:B*Tree索引、反向索引、降序索引以及位图索引。 1. **B*Tree索引**是Oracle中最常见的一种索引类型,适用于高基数数据列,即包含大量不同值的列。B*Tree索引由分支块和...

    oracle索引分析与比较

    Oracle数据库中的索引是提升数据查询效率的关键工具,主要包括B*Tree索引、反向索引、降序索引、位图索引和函数索引五种类型。每种索引都有其特定的适用场景和优缺点。 1. **B*Tree索引**:B*Tree(B树)是最常见和...

    Oracle-索引.ppt

    5. **反向键索引**:这是一种特殊的B树索引,反转索引列的字节,使得数据插入分布更均匀,减少热点区域。 6. **基于函数的索引**:基于列上的函数或表达式创建,使得可以基于函数结果进行查询,但不支持聚集函数,也...

Global site tag (gtag.js) - Google Analytics