码迷,mamicode.com
首页 > 数据库 > 详细

红黑树 B-树 B+树 数据库索引

时间:2015-08-30 15:45:52      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:

红黑树, 是一颗有特殊性质的二叉查找树,

节点,要么红要么黑

根节点是黑的

叶节点是黑的

如果一个节点是红的,那么它的两个儿子是黑的

对任意节点而言,其道叶节点树尾端NIL指针的每条路径都包含相同数据的黑节点

 

在插入或删除节点时,可能会改变红黑树的性质,需要调整使得继续保持性质,常用的操作为左旋和右旋

红黑树的左旋和右旋:

左旋pivot

技术分享

pivot-Y为轴,Y称为新的根节点,Y的左子树称为pivot的右子树

 

右旋pivot

技术分享

pivot-Y为轴,Y称为新根,pivotY的新右子树

 

 

B-树(B树)

用阶定义的B树

    B 树又叫平衡多路查找树。一棵m阶的树 (注:切勿简单的认为一棵m阶的B树是m叉树,虽然存在四叉树八叉树KD树,及vp/R/R*/R+/X/M/线段树/希尔伯特R/优先R树等空间划分树,但与B树完全不等同)的特性如下:

树中每个结点最多含有m个孩子(m>=2);

除根结点和叶子结点外,其它每个结点至少有[ceil(m / 2)]个孩子(其中ceil(x)是一个取上限的函数);

若根结点不是叶子结点,则至少有2个孩子(特殊情况:没有孩子的根结点,即根结点为叶子结点,整棵树只有一个根节点);

所有叶子结点都出现在同一层,叶子结点不包含任何关键字信息(可以看做是外部接点或查询失败的接点,实际上这些结点不存在,指向这些结点的指针都为null);(读者反馈@冷岳:这里有错,叶子节点只是没有孩子和指向孩子的指针,这些节点也存在,也有元素。@研究者July:其实,关键是把什么当做叶子结点,因为如红黑树中,每一个NULL指针即当做叶子结点,只是没画出来而已)。

每个非终端结点中包含有n个关键字信息: (n,P0,K1,P1,K2,P2,......,Kn,Pn)。其中:
       a)   Ki (i=1...n)为关键字,且关键字按顺序升序排序K(i-1)< Ki。 
       b)   Pi为指向子树根的接点,且指针P(i-1)指向子树种所有结点的关键字均小于Ki,但都大于K(i-1)。 
       c)   关键字的个数n必须满足: [ceil(m / 2)-1]<= n <= m-1。

技术分享

 

B+树:B树的一个变种

mB+树与B树的异同:

n颗子树的节点中含有n-1个关键字

所有的关键字信息都在叶子节点上

非终端节点可以看成是索引

叶子节点从小到大顺序链接

技术分享

 

为什么B+树比B树更适合作为操作系统中文件索引和数据库索引:

1.B+树的磁盘读写代价更低

内部节点更小,在相同的盘块中,可以存放的内部节点更多,一次性读入内存中的需要查找的关键字也越多。

B树的每个节点都是以key_address的形式存储的,而B+树的非叶子节点只需要存储key,address信息可以放在叶子节点上。所以在搜索的时候,一次读入的数据块能包含更多的节点,提高检索效率

2.查询效率更稳定

每次查询都需要从根节点到叶子节点

3.叶子节点从左到右链接,根据局部性原理,方便加载左右数据

红黑树 B-树 B+树 数据库索引

标签:

原文地址:http://www.cnblogs.com/zxahu/p/4770865.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!