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使用的是哪一种树?的主要内容,如果未能解决你的问题,请参考以下文章