ORACLE索引的分类: B*Tree索引与反向索引
来源:互联网 发布:黑白网络基地 编辑:程序博客网 时间:2024/05/21 17:44
B*Tree索引是最常见的索引结构,默认建立的索引就是这种类型的索引。B*Tree索引在检索高基数数据列(高基数数据列是指该列有很多不同的值)时提供了最好的性能。当取出的行数占总行数比例较小时B-Tree索引比全表检索提供了更有效的方法。但当检查的范围超过表的10%时就不能提高取回数据的性能。B-Tree索引是基于二叉树的,由分支块(branch block)和叶块(leaf block)组成。在树结构中,位于最底层底块被称为叶块,包含每个被索引列的值和行所对应的rowid。在叶节点的上面是分支块,用来导航结构,包含了索引列(关键字)范围和另一索引块的地址,如图26-1所示。
假设我们要找索引中值为80的行,从索引树的最上层入口开始,定位到大于等于50,然后往左找,找到第2个分支块,定位为75-100,最后再定位到叶块上,找到80所对应的rowid,然后根据rowid去读取数据块获取数据。如果查询条件是范围选择的,比如where column >20 and column <80,那么会先定位到第一个包含20的叶块,然后横向查找其他的叶块,直到找到包含80的块为止,不用每次都从入口进去再重新定位。
反向索引
反向索引是B*Tree索引的一个分支,它的设计是为了运用在某些特定的环境下的。Oracle推出它的主要目的就是为了降低在并行服务器(Oracle Parallel Server)环境下索引叶块的争用。当B*Tree索引中有一列是由递增的序列号产生的话,那么这些索引信息基本上分布在同一个叶块,当用户修改或访问相似的列时,索引块很容易产生争用。反向索引中的索引码将会被分布到各个索引块中,减少了争用。反向索引反转了索引码中每列的字节,通过dump()函数我们可以清楚得看见它做了什么。举个例子:1,2,3三个连续的数,用dump()函数看它们在Oracle内部的表示方法。
SQL> select 'number',dump(1,16) from dual
2 union all select 'number',dump(2,16) from dual
3 union all select 'number',dump(3,16) from dual;
'NUMBE DUMP(1,16)
------ -----------------
number Typ=2 Len=2: c1,2 (1)
number Typ=2 Len=2: c1,3 (2)
number Typ=2 Len=2: c1,4 (3)
再对比一下反向以后的情况:
SQL> select 'number',dump(reverse(1),16) from dual
2 union all select 'number',dump(reverse(2),16) from dual
3 union all select 'number',dump(reverse(3),16) from dual;
'NUMBE DUMP(REVERSE(1),1
------ -----------------
number Typ=2 Len=2: 2,c1 (1)
number Typ=2 Len=2: 3,c1 (2)
number Typ=2 Len=2: 4,c1 (3)
我们发现索引码的结构整个颠倒过来了,这样1,2,3个索引码基本上不会出现在同一个叶块里,所以减少了争用。不过反向索引又一个缺点就是不能在所有使用常规索引的地方使用。在范围搜索中其不能被使用,例如,where column>value,因为在索引的叶块中索引码没有分类,所以不能通过搜索相邻叶块完成区域扫描。
- ORACLE索引的分类: B*Tree索引与反向索引
- 正向索引、反向索引、B*Tree索引
- Oracle位图索引与B-Tree索引的优缺点
- Oracle的B* Tree 索引
- Oracle索引(B*tree与Bitmap)的学习总结
- oracle 索引 使用的 B-Tree
- oracle B*Tree索引的理解
- oracle B*Tree索引的理解 续
- Hash索引与B-Tree索引
- B*Tree索引与Bitmap索引
- Hash索引与B-Tree索引
- Oracle中B-Tree索引与Bitmap索引的锁代价的比较
- Mysql的Hash索引与B-Tree索引
- Oracle 深入解析B-Tree索引与Bitmap位图索引的锁代价
- Oracle中B-Tree索引与Bitmap位图索引的锁代价比较研究
- Oracle 索引的分类
- Oracle 索引的分类
- Oracle 索引的分类
- JavaScript 的 new
- 功能强大的JavaScript引擎--SpiderMonkey
- [初级]避免多个头文件重复定义的问题
- Oracle树形结构查询
- 数据结构及算法-何谓数据结构
- ORACLE索引的分类: B*Tree索引与反向索引
- typeof
- 索引概述
- 怎么样把VB中计算的结果输出到WORD中
- SetBitmapBits问题
- 忠告
- Oracle 索 引 的 分 类 :降序索引和位图索引
- 分析函数基础概念
- 测试……