B(-+*)树介绍,及索引种类

B树、B-树、B+树、B*树 介绍、比较:

B树:
  二叉树,每个结点只存储一个关键字,等于则命中。
B-树:
  多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点;
  所有关键字在整棵树中出现,且只出现一次,非叶子结点可以命中。
B+树:
  在B-树的基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;
  B+树总是到叶子结点才命中
B*树:
  在B+树的基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3。


数据库索引的种类
有两种基本的索引结构,也就是索引文件的保存方式,一个是顺序索引,另外一个是散列索引。

1、顺序索引
  如果被索引的字段本身按照一定的顺序排序,那么这种索引叫做聚集索引。否则叫做非聚集索引
  如果被索引的字段的每个值都有一个索引与其对应,那么这种索引叫做稠密索引,否则叫做稀疏索引
  顺序索引分为两类,单级索引(最基础的索引,一般不用(估计研究索引理论用))和多级索引(通常是B+树,大量使用,ORACLE的默认索引)。

2 散列索引
  通过散列函数来定位的一种索引。
  不过很少有单独使用散列索引的,反而是散列文件组织用的比较多。

  散列文件组织就是根据一个键通过散列计算把对应的记录都放到同一个槽中,这样的话相同的键值对应的记
  录就一定是放在同一个文件里了,也就减少了文件读取的次数,提高了效率。

  散列索引就是根据对应键的散列码来找到最终的索引项的技术,和B树就差不多,是一种索引之上的二级辅助索引。

3 位图索引
  一种针对多个字段的简单查询设计一种特殊的索引,适用范围比较小。
  只适用于字段值固定并且值的种类很少的情况,比如性别,只能有男和女,或者级别,状态等等,
  并且只有在同时对多个这样的字段查询时才能体现出位图的优势。

总结:
  B+树最常用,性能也不差,用于范围查询和单值查询都可以。特别是范围查询,非得用B+树这种顺序的才可以了。
  HASH的如果只是对单值查询的话速度会比B+树快一点,但是ORACLE好像不支持HASH索引,只支持HASH表空间。
  位图的使用情况很局限,只有很少的情况才能用,一定要确定真正适合使用这种索引才用(值的类型很少并且需要复合查询),否则建立一大堆位图就一点意义都没有了。

  索引的意义不在于查找。也不在于记录下匹配记录的地址。而在于它的尺寸。
  ORACLE不用HASH,可能是因为HASH只能帮助内存操作,不能帮助磁盘操作。
  而磁盘操作正是数据库的真正瓶颈。索引的价值主要在于其尺寸的小。

来源:
http://my.oschina.net/digerl/blog/29760
http://wenku.baidu.com/view/40bfd127ccbff121dd368319.html

posted @ 2012-02-16 14:44  万法自然~  阅读(489)  评论(0编辑  收藏  举报