ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 平衡树索引(b-tree index)

平衡树索引(b-tree index)

原创 Linux操作系统 作者:pingley 时间:2012-04-08 16:47:56 0 删除 编辑
平衡树索引(b-tree index)
什么是平衡树索引与平衡树索引的特性
平衡树的组织形式是倒立的树形。平衡树中共有两种节点(block),分支节点用来查找查找叶子节点的。叶子节点存储键值与对应的记录的rowid,即(key,rowid).分支节点中存储了对key 的分组信息与指向叶子节点的指针。叶子节点之间通过双向指针连接起来。之所有叫做平衡树是因为所有叶子节点的深度都相同。也正是因为这个特性,使得平衡树在查找任何一条记录的时候所花的时间几乎相同(读取了相同数量的数据块)。即使在不同记录的表中的平衡树索引检索记录的效率也差不多。平衡树索引时数据库中最常见的索引类型。
平衡树的高度:指的是从根节点都叶子节点所经过的节点数。
分组节点的高度:等于平衡树的高度减1。
注:以下所提索引均指平衡树索引。
自动创建平衡树索引
在一下的情景下会自动创建平衡树索引(unique index):
1、在primary key 列上自动创建平衡树索引。
2、在unique 上自动创建平衡树索引。
如果primary key  和 unique 约束的列,和另外一个约束相关,那么oracle 不一定自动创建索引。具体有没有创建需要通过一些视图来确定。在这些列上创建索引能够提高查询的效率,排序的效率,确定值是否唯一的效率,join的效率。如果需要在其他列创建唯一索引可以使用create unique index   语句。
使用平衡树索引的注意事项
虽然索引可以加速数据的检索,但是在一下情况下不一定总是适合的:
1、DML操作频繁的表,因为在执行DML操作时还需要维护索引,所以会影响DML操作的性能,所以你需要考虑是查询的性能重要还是DML操作的性能更重要。一般在OLTP系统中对DML操作的性能要求要高些,在OLAP系统中对查询的要求高些。并不是说为了DML的效率就不要考虑使用索引而要进行平衡,或者为了DML的效率尽可能少的使用索引。
2、平衡树索引典型的适用于查询返回很小百分比的表数据。因为当需要检索很多记录时,使用索引可能需要执行额外的数据块读取(读取完很多索引块以后还需要读取大量的表的数据块)。对于返回的表记录的百分比没有一个通用的标准(一些准则认为是小于10%),最好的方式是进行测试。
3、典型情况下,小表不会受益于索引,因为往往直接进行全表扫描可能更快速,因为读取的数据块更少或者进行一次或者几次联系的IO,比使用索引时进行零散的IO读取更高效。
4、索引的维护需要考虑额外的存储开销。
在创建索引时要需要考虑索引要建在那个或者是那些列上面。通常建立在被where 子句频繁使用的列,或者频繁进行排序的列,常用来join 的列。对于用作排序的列可以根据排序的类型来创建(ASC 默认和DESC)的索引。在平衡树索引中查找不到索引列的值是null 的记录,所以如果索引所在的列包含很多null  值的话,而你的查询又要过滤掉这些null 值,这时候索引无疑是很有用的。如果你需要查询的正是这些null 值那么oracle 会进行全表扫描,不管平衡树索引的存在。如果你希望通过使用索引来提高性能,可以考虑使用FBI。也可以创建复合的平衡树索引来提高性能,当查询条件经常中包括的columns 上创建了复合索引的时候可以提高该查询的性能,在这种情况下维护一个复合索引比维护几个单独的索引更加的高效(读取一个复合索引比读取多个单独的索引的IO次数少,另外查询的结果不需要合并)。在复合索引中应该把频繁使用的列放在创建索引语句的前面,这样会更加高效。如果查询条件中只包含复合索引中的一列也可以使用复合索引。(复合平衡树索引最多只能参照32列)。注:判断索引是否有效的最好方法是进行测试。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26110315/viewspace-720655/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    169
  • 访问量
    741709