(九)为什么索引更适合B+树

索引的功能即提高查找速度,从能够提高查找速度的数据结构说起。

目录

①二叉排序树

②平衡二叉树(AVL树)

③B-树

④B+树


①二叉排序树

         二叉排序树,若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左、右子树也分别为二叉排序树。

       如果二叉树的结构良好,其高度与树中结点个数n成对数关系,检索的时间开销为O(logn),但是如果树结构为畸形,检索的最坏时间可能达到O(n)

                  

②平衡二叉树(AVL树)

       是一种特殊的二叉排序树,要求平衡因子(左子树高度减去右子树高度绝对值不超过1),AVL的通过四种旋转维护其性质。

使用AVL树做索引也有弊端:

(1)维护平衡过程的成本代价很高,因为每次删除一个节点或者增加一个节点的话,需要一次或者多次的左旋,右旋等去维护“平衡”状态。

(2)然后是查询的效率不稳定,叶子结点不在同一平面,有可能第一次就查到。

(3)然后是如果节点很多,那么这个AVL树会很高降低查询效率。

(4)AVL树结点储存内容较少,因为局部预读原理说明:当访问一个地址数据的时候,与其相邻的数据很快也会被访问到。每次磁盘IO读取的数据我们称之为一页(page)。一页的大小与操作系统有关,一般为4k或者8k。这也就意味着读取一页内数据的时候,实际上发生了一次磁盘IO。

③B-树

B树特点:

1)B树每个结点多个分支,m阶B-树规定非叶子结点中的分支(子树)数量(关键字数量在此基础-1)范围是  [m/2向下取整,m](有n个分支结点有n-1个关键字,有一个分支是储存关键字数量的)。则相同数量关键字B-树高度更低,检索更快。

2)结点储存关键字更多,能更好地利用磁盘局部预读的特性。

3)所有的叶子节点的高度都是一样,这个保证了每次查询数据时比较稳定的查询效率。但仍有可能第一个就查到了数据,查询的效率不够稳定。

                                 
 

④B+树

                               B+æ 

                               

B+树特性

①:B+树中只有叶子节点会带有指向记录的指针,而B树则所有节点都带有,B树在内部节点出现的索引项不会再出现在叶子节点中。中间节点全是索引节点,一个是可以降低树的高度,另一个是一个中间节点可以索引到更多的记录,因为B+ Tree中节点的内节点无 data 域,但是操作西荣每次IO的页的大小是固定的,那么每次IO读取若干个块块中包含的Key域的值更多,B+树单次磁盘 IO 的信息量大于B树,从这点来看B+树相对B树磁盘 IO 次数少。

 ②:叶节点两两相连可以直接在叶子节点层横向遍历,可使用在范围查询等,而B-树b树想要遍历则需要叶子节点和上层节点不停往返(先序中序后序)。

③:叶子结点在同一高度,且指向记录的指针都在叶子结点,所以查找效率稳定在O(logn)

参考:https://blog.csdn.net/qq_36520235/article/details/94317993

          https://blog.csdn.net/wwh578867817/article/details/50493940

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值