B-Tree 和 B+-tree 的区别?

一、B树

B-Tree 和 B+-tree 的区别?
知识点:mysql对每一个节点分配的内存大小约为:16kb
查询方式如图2,也就是说图1这样一个节点,mysql分配的内存为16kb
B-Tree 和 B+-tree 的区别?

图2

B-Tree 和 B+-tree 的区别?

二、B+树(mysql底层是使用的B+树)

B-Tree 和 B+-tree 的区别?

三、B-Tree 和 B±tree 的区别

1、B-Tree非叶子节点和叶子节点都有数据,B±tree只有叶子节点有数据(叶子节点包含了所有数据)。
原因:非叶子节点只存储索引,不存储数据,有利于每个节点存储更多索引。
2、B-Tree叶子节点之间不存在指针,B±tree叶子节点之间存在指针。
原因:有助于范围查找。

四、拓展:

mysql对每一个节点分配的内存大小约为:16kb,那么三层B+树可以存储多少数据呢?

答:如图1所示,非叶子节点,每个节点可以存放1170个索引元素。如图二所示,叶子节点,每个节点可以存放16个索引元素。当第三层放满元素,能存放1170×1170×16=2100万。
所以,2000万的数据量,顶多也就进行三次磁盘IO,所以速度很快。

图一:
B-Tree 和 B+-tree 的区别?
图二:
B-Tree 和 B+-tree 的区别?