1.B+树的非叶子节点不存储数据,所有data存储在叶子节点,导致查询查询时间复杂度为log;而B-树的查询时间复杂度不固定,与关键字在树中的位置有关,最好为O(1)
2.B+树的节点两两相连可大大增加区间访问性,可使用范围查询等;而B-树每个节点关键字和data在一起,无法区间查找
3.B+树更适合外部存储,由于内节点无data域,每个节点能索引的范围更大更精确
为什么MongoDB索引选择B-树,而MySQL(InnoDB)索引选择B+树
MongoDB 是文档型的数据库,是一种 NoSQL,一般使用 XML 或 Json 格式来保存数据,归属于聚合型数据库。被设计用在数据模型简单,性能要求高的场合。尽可能少的磁盘 IO 是提高性能的有效手段。MongoDB 是聚合型数据库,而 B-树恰好关键字和 data 域聚合在一起。
Mysql 是一种关系型数据库,区间访问是常见的一种情况,而 B-树并不支持区间访问,B+树由于数据全部存储在叶子节点,并且通过指针串在一起,这样就很容易的进行区间遍历甚至全部遍历,且每个节点能索引的范围更大更精确。
网友评论