数据结构:内存操作红黑树快,磁盘操作B树或者B+树快

B+树的高度要比红黑树小,有效减少了磁盘的随机访问;
B+树的数据节点相互临近,能够发挥磁盘顺序读取的优势(缓存);
B+树的数据全部存于叶子结点,而其他节点产生的浪费在经济负担上能够接受,红黑树存储浪费小;

 

红黑树常用于存储内存中的有序数据,增删很快B+树常用于文件系统和数据库索引。

红黑树只能有2个子节点;

B树子节点大于2,子节点树多这一特点保证了存储相同大小的数据,树的高度更小,数据局部更加紧凑,而硬盘读取有局部加载的优化(把要读取数据和周围的数据一起预先读取),b树相邻数据物理上更加紧凑这一特点符合硬盘进行IO优化的特性。

B+树在b树基础上进一步将数据只存在叶子节点,非叶子节点不存值只存储关键字或者键值和值的指向,而且叶子节点前后相连放入链表中。使得数据更加紧凑有序,只需要链表(叶子节点)的一次遍历就能获取所有树上的值。

 

B-树(B树)和B+树的区别

(1)B+树查询时间复杂度固定是logn,B-树查询复杂度最好是 O(1)。

(2)B+树相邻接点的指针可以大大增加区间访问性,可使用在范围查询等,而B-树每个节点 key 和 data 在一起,则无法区间查找。

(3)B+树更适合外部存储,也就是磁盘存储。由于内节点无 data 域,每个节点能索引的范围更大更精确。

总之,B-树每个节点即保存数据又保存索引,所以磁盘IO的次数很少;B+树只有叶子节点保存,磁盘IO多,但是区间访问比较好。

所以:

MongoDB使用B-树,所有节点都有Data域,只要找到指定索引就可以进行访问,无疑单次查询平均快于Mysql

Mysql作为一个关系型数据库,数据的关联性是非常强的,区间访问是常见的一种情况B+树由于数据全部存储在叶子节点,并且通过指针串在一起,这样就很容易的进行区间遍历甚至全部遍历。

 

 

 

参考文章:

https://blog.csdn.net/qq_17612199/article/details/52193776

https://www.cnblogs.com/snailmanlilin/p/8036514.html

posted on 2020-03-26 11:25  orange-C  阅读(713)  评论(0编辑  收藏  举报

导航