日期:2014-05-16  浏览次数:20356 次

oracle索引(1)——B-TREE索引

?

? ?1.B-tree索引

? ? oracle的一个通用索引,创建时是默认的索引选项。

? ? 可以是一个列的(简单)索引,也可以是组合/复合(多个列)的索引。B树索引最多可以包括32列。

?

? ? 1)根节点:一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点。

? ? 2)分支节点:最小的键值前缀,用于在(本块的)两个键值之间做出分支选择,指向包含所查找键值的 ? 子块的指针。

? ? ? ? ? ? ? ? ? ? ? ? ? ?所有的 键值-ROWID 对都与其左右的兄弟节点链接,并按照(key,ROWID)的顺序排序

? ? 3)叶子节点:数据行的键值(key value)、键值对应数据行的 ROWID

??
? ? ? 说明:对于分支节点块(包括根节点块)来说,其所包含的索引条目都是按照顺序排列的(缺省是升序 ? 排列,也可以在创建索引时指定为降序排列)。

? ? ? ? ? ? ? ? ?每个索引条目(也可以叫做每条记录)都具有两个字段。

? ? ? ? ? ? ? ? ?第一个字段表示当前该分支节点块下面所链接的索引块中所包含的最小键值;

? ? ? ? ? ? ? ? ?第二个字段为四个字节,表示所链接的索引块的地址,该地址指向下面一个索引块。

? ? ? ? ? ? ? ? ?在一个分支节点块中所能容纳的记录行数由数据块大小以及索引键值的长度决定。

? ? ? ? ? ? ? ? ?比如从上图一可以看到,对于根节点块来说,包含三条记录,分别为(0 B1)、(500 B2)、 ? ? (1000 B3),它们指向三个分支节点块。

? ? ? ? ? ? ? ? ?其中的0、500和1000分别表示这三个分支节点块所链接的键值的最小值。

? ? ? ? ? ? ? ? ?而B1、B2和B3则表示所指向的三个分支节点块的地址。

? ? ? ??

? ? ? ? ? ? ? ? ? 对于叶子节点块来说,其所包含的索引条目与分支节点一样,都是按照顺序排列的(缺省是升序 排列,也可以在创建索引时指定为降序排列)。

? ? ? ? ? ? ? ? ? 每个索引条目(也可以叫做每条记录)也具有两个字段。

? ? ? ? ? ? ? ? ? 第一个字段表示索引的键值,对于单列索引来说是一个值;而对于多列索引来说则是多个值组合 在一起的。

? ? ? ? ? ? ? ? ? 第二个字段表示键值所对应的记录行的ROWID,该ROWID是记录行在表里的物理地址。

? ? ? ? ? ? ? ? ? 如果索引是创建在非分区表上或者索引是分区表上的本地索引的话,则该ROWID占用6个字节;

? ? ? ? ? ? ? ? ? 如果索引是创建在分区表上的全局索引的话,则该ROWID占用10个字节。

?

? ? ??技巧:索引列的值都存储在索引中。因此,可以建立一个组合(复合)索引,这些索引可以直接满足查询, 而不用访问表。这就不用从表中检索数据,从而减少了I/O量。

?

? ? ? B-tree?特点:适合与大量的增、删、改(OLTP)
? ? ? ? ? ? ? ? ? ? ? ? ? ?不能用包含OR操作符的查询;
? ? ? ? ? ? ? ? ? ? ? ? ? ?适合高基数的列(唯一值多,比如主键字段,每行都是唯一值)
? ? ? ? ? ? ? ? ? ? ? ? ? ?典型的树状结构;
? ? ? ? ? ? ? ? ? ? ? ? ? ?每个结点都是数据块;
? ? ? ? ? ? ? ? ? ? ? ? ? ?大多都是物理上一层、两层或三层不定,逻辑上三层;
? ? ? ? ? ? ? ? ? ? ? ? ? ?叶子块数据是排序的,从左向右递增;
? ? ? ? ? ? ? ? ? ? ? ? ? ?在分支块和根块中放的是索引的范围;

?

??