b树(Balanced Tree)多路平衡查找树
所有关键字和数据分布在整个树中。
任何关键字出现且只出现在一个节点中。
因为数据在所有的节点上,所以搜索有可能在非叶子节点结束。
在关键字全集内做一次查找,性能逼近二分查找算法。
B+Tree (B+树是 B 树的变体)
数据都存储在叶子节点上,非叶子节点数据只是主键
叶子节点相互之间又链指针,范围查找效率更高
mysql为什么使用了b+树而不是b-树
由于非叶子节点不存储 data,所以一个存储页(默认为16k)可以存储更多的非叶子节点,也就是说使用 b+树单次磁盘 I/O拿到的同大小存储页中包含的信息量相比 b-树更大,所以减少了同样数据量下每次查询的io次数。
MySQL 是关系型数据库,经常会按照区间来访问某个索引列,B+树的叶子节点间按顺序建立了链指针,加强了区间访问性,所以 B+树对索引列上的区间范围查询很友好。而 B 树的查找,需要子节点返回到父节点的查找,效率低.