B树和B+树分别是什么?区别在哪里?MySQL使用的是哪一种树?

Posted Data+Science+Insight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B树和B+树分别是什么?区别在哪里?MySQL使用的是哪一种树?相关的知识,希望对你有一定的参考价值。

B树和B+树分别是什么?区别在哪里?mysql使用的是哪一种树?

B树,每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为nul,叶子结点不包含任何关键字信息。

B+树,所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接,所有的非终端结点可以看成是索引部分,结点中仅含有其子树根结点中最大(或最小)关键字。

为什么MySQL用B+树呢?

  • B+ 树查询效率更稳定(因为因为B+ 树每次只有访问到叶子节点才能找到对应的数据 而在 B 树中 非叶子节点也会存储数据)
  • B+ 树的查询效率更高 (因为通常B+ 树比 B 树更矮胖 阶数更大 深度更低 查询所需要的磁盘 I/O 也会更少 。 同样的磁盘页大小 B+ 树可以存储更多的节点关键字)
  • 对索引进行范围查询时 B+ 树效率也更高(因为所有关键字都出现在B+ 树的叶子节点中 并通过有序链表进行了链接 。 而在 B 树中则需要通过中序遍历才能完成范围查找 效率要低很多)

B 树可以看作是对2-3查找树的一种扩展,即他允许每个节点有M-1个子节点。

  • 根节点至少有两个子节点
  • 每个节点有M-1个key,并且以升序排列
  • 位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间
  • 其它节点至少有M/2个子节点

下图是一个M=4 阶的B树:

以上是关于B树和B+树分别是什么?区别在哪里?MySQL使用的是哪一种树?的主要内容,如果未能解决你的问题,请参考以下文章

一文彻底搞懂MySQL基础:B树和B+树的区别

B树和B+树的区别#yyds干货盘点#

B+树索引是啥?

最简单方式理解为什么MongoDB索引选择B-树,而 Mysql 选择B+树

为什么 MySQL 使用 B+ 树

b树和b+树的区别