为什么MySQL数据库用B+树,MongoDB用B树

数据结构:

B树是所有节点上都有数据,单条查询的效率不稳定,最好就是情况可以直接找到,但最差情况需要一直找到叶子节点,叶子节点之间没有用指针连接。
B+树 所有的数据都存放在叶子节点上,非叶节点只起到索引的作用,单条查询效率稳定,查询任何信息都需要查找到叶子节点为止,叶子节点之间通过双向指针连接,可以通过这些指针有序的遍历数据。
因此,B树单条查询的平均效率比B+树好,遍历数据B+树比B树好。

MySQL用B+树可能是因为对数据的范围遍历操作比较多,MongoDB用B树是因为单条数据查询比较多。

为什么呢?

这可能和mysql是关系型数据库,MongoDB是非关系型数据库有关。
关系型数据库采用了关系模型,一般每张表会对应一个抽象实体,表与表之间存在着一对一、一对多、多对一等关系,比如说学生表和导师表,一个学生只有一个导师,而一个导师有多个学生,当我们需要查询某个导师的学生时,就需要遍历学生表。
非关系型数据库中没有表的概念,只有类似的集合概念,一个集合中存放的文档之间可以是不同的(包含的属性可以不同),适合于数据存储不需要固定的模式,或者数据类型经常变化的情况。在NoSQL里面这种一对多可以采用嵌入文档,老师集合中每个文档(记录),有一个字段属性是学生,而值是一个数组类型,数组里面存放的又是学生的记录。因此直接查某个老师来获取学生,而不用去遍历数据。
当然非关性数据库里面的集合也可以照着关系型数据库的表来建,但这样就不符合NoSQL类型数据库的设计理念。如果对一个NoSQL经常使用遍历,就可能是数据库集合的设计出问题,或者是选错了数据库。

发布了13 篇原创文章 · 获赞 0 · 访问量 3361
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览