oralce 索引(2)

B-Tree 索引

本文来自网上整理 来自以下博客内容

http://www.360doc.com/content/13/0712/11/13136648_299364992.shtml;

http://www.cnblogs.com/fnng/archive/2012/10/10/2719221.html;

 B-Tree index 也是我们传统上常见所理解的索引。B-tree (balance tree)即平衡树,左右两个分支相对平衡。

 B树索引在Oracle中是一个通用索引。在创建索引时它就是默认的索引类型。B树索引可以是一个列的(简单)索引,也可以是组合/复合(多个列)的索引。B树索引最多可以包括32列。
树叶块包含了索引值、ROWID,以及指向前一个和后一个树叶块的指针。Oracle可以从两个方向遍历这个二叉树。B树索引保存了在索引列上有值的每个数据行的ROWID值。Oracle不会对索引列上包含NULL值的行进行索引。如果索引是多个列的组合索引,而其中列上包含NULL值,这一行就会处于包含NULL值的索引列中,且将被处理为空(视为NULL)。

oralce 索引(2)

Root为根节点,branch 为分支节点,leaf 到最下面一层称为叶子节点。每个节点表示一层,当查找某一数据时先读根节点,再读支节点,最后找到叶子节点。叶子节点会存放index entry (索引入口),每个索引入口对应一条记录。

Index entry 的组成部分:

Indexentry entry  header    存放一些控制信息。

Key column length     某一key的长度

Key column value      某一个key 的值

ROWID    指针,具体指向于某一个数据

例子说明

SQL> create table dex (id int,sex char(1),name char(10));

Table created.

--向表中插入1000条数据

SQL> begin

  for i in 1..1000

  loop

  insert into dex values(i,'M','chongshi');

  end loop;

  commit;

  end;

  /



PL/SQL procedure successfully completed.



查看表记录

SQL> select * from dex;

        ID SE NAME

---------- -- --------------------

       ... . .....

 M  chongshi

 M  chongshi

 M  chongshi

 M  chongshi

 M  chongshi

 M  chongshi

 M  chongshi

 M  chongshi

 M  chongshi

 M  chongshi

 rows selected.

--创建索引:

SQL> create index dex_idx1 on dex(id);

Index created.

注:对表的第一列(id)创建索引。



--查看创建的表与索引

SQL> select object_name,object_type from user_objects;



OBJECT_NAME                  OBJECT_TYPE

--------------------------------------------------------------------------------

DEX                           TABLE

DEX_IDX1                      INDEX



SQL> create index dex_index2 on dex(sex,name);

Index created.



SQL>  select object_name,object_type from user_objects;



OBJECT_NAME                           OBJECT_TYPE

--------------------------------------------------------------------------------

DEX                                       TABLE

DEX_IDX1                                 INDEX

DEX_INDEX2                               INDEX

oralce 索引(2)

上面这张图能更加清晰的描述索引的结构。

跟节点记录0至50条数据的位置,分支节点进行拆分记录0至10.......42至50,叶子节点记录每第数据的长度和值,并由指针指向具体的数据。

最后一层的叶子节是双向链接,它们是被有序的链接起来,这样才能快速锁定一个数据范围。

SQL> select * from dex where id>23 and id<32;



        ID SE NAME

---------- -- --------------------

        24 M  chongshi

        25 M  chongshi

        26 M  chongshi

        27 M  chongshi

        28 M  chongshi

        29 M  chongshi

        30 M  chongshi

        31 M  chongshi



8 rows selected.

如上面查找的列子,通过索引的方式先找到第23条数据,再找到第32条数据,这样就能快速的锁定一个查找的范围,如果每条数据都要从根节点开始查找的话,那么效率就会非常低下。

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

你可能感兴趣的:(oralce)