B树,B+树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Mysql采用B+树原因

  • B树和B+树最重要的一个区别就是B+树只有叶子节点存放数据,其余节点用来索引。而B树的每个节点都会有data域。这就决定了B+树更适合用来存储外部数据。也就是所谓的磁盘数据。
  • B+树的磁盘读写代价更佳。B+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对B树更小。如果把所有同一内部节点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也就越多。一次性读入内存中需要查找的关键字也就越多。相对来说IO读写次数也就降低了。
  • B+树的查询效率更加稳定。由于内部节点并不是最终指向文件内容的节点,而只是叶子节点中关键字的索引。所以任何关键字的查找必须走一条从根节点到叶子节点的路径。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。
  • B+的叶子节点通过一个双向链表进行链接,对于主键的排序查找和范围查找速度非常快,叶子节点的数据就是用户所要查询的数据。
  • 在数据库中,B+树的高度一般都在2~4层,这也就是说查找某一键值的行记录时最多只需要2到4次IO。

B+树和B树的区别

  • B树非叶子节点和叶子节点都存储数据,因此查询数据时,时间复杂度最好为 O ( 1 ) O(1) O(1),最坏为 O ( l o g n ) O(logn) O(logn)
  • B+树只在叶子节点存储数据,非叶子节点存储关键字,且不同非叶子节点的关键字可能重复,因此查询数据时,时间复杂度固定为 O ( l o g n ) O(log n) O(logn)
  • B+树叶子节点之间用双向链表相互连接,因而只需要扫描叶子节点的链表就可以完成一次遍历操作,B树只能通过中序遍历;

为什么B+树比B树更适合应用于数据库索引

  • B+树更加适应磁盘的特性,相比B树减少了IO读写的次数,由于索引文件很大因此索引文件存储在磁盘上,B+树的非叶子节点只存储关键字不存数据,因此单个页可以存储更多的关键字,即一次性读入内存的需要查找的关键字也就越多,磁盘的随机IO读取次数相对就减少了;
  • B+树的查询效率相比B树更加稳定,由于数据只存储在叶子节点上,所以查询效率固定为 O ( l o g n ) O(logn) O(logn)
  • B+树叶子节点之间用链表有序连接,所以扫描全部数据只需要扫描一遍叶子节点,利于排序查找和范围查找;B树由于非叶子节点也存储数据,所以只能通过中序遍历按顺序查找,也就是说,对于范围查询和有序遍历而言,B+树的效率更高;

B树的优势是当要查找的值恰好处于一个非叶子节点时,查找该节点就会成功并结束查询,而B+树由于非叶子节点只是索引部分,无论查找成功与否,都是走了一条从根到叶子节点的路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值