先说B树和B+树的区别

B树:非叶子节点也存储数据

B+树:只有叶子节点存储数据,且所有叶子节点通过指针相连接。

为什么MongoDB选择B树而,MySQL选择B+树呢?两种数据结构的区别摆在上面了,那就看MongoDB和MySQL的需求

首先:

MongoDB属于文档型存储的NoSQL,意味着它并不是关系型数据库,既然如此,基本不会出现批量连续数据的查询,那么B+树的叶子节点通过指针相连接对于MongoDB来说,就没多少价值了。

再看看B树的优缺点(相对于B+树):

优点:数据直接存在于非叶子节点上,最近查询时间复杂度为O(1)

缺点:叶子节点不通过指针连接,不适合范围查询

到这里,基本已经清楚了为什么MongoDB选择B树而不是B+树了。

解释一下为什么文档型NoSQL为什么基本不会出现连续数据查询:

关系型数据库的数据结构

id type
1 a
2 a
3 b

如果通过type构建索引,查询是:

SELECT id FROM t1 WHERE type='a';

是不是查找一段连续的数据呢?或者包含join的查询同理

那么MongoDB就不会有这种查询吗?

不是不会有这种查询,而是一般不会这样设计

MongoDB中的设计

{
    "_id":"1",
    "type":"a",
    "id":[
        1,
        2,
        3
    ]
}

看到了吗?用type建立索引,查询一条数据就拿到想要的结果了。

引发思考(私货):

MongoDB很多情况下用来存储日志,如果需要将日志分类存储,且对查询速度要求较高,可以通过物化视图,将同类的日志内容合并,提高查询速度。

最新文章

  1. [译] 理解PHP内部函数的定义(给PHP开发者的PHP源码-第二部分)
  2. 时钟周期,CPU周期,指令周期,CPU时间片
  3. centos7 安装jdk1.8
  4. python之路-Day3
  5. 矢量Chart图表嵌入HTML5网络拓扑图的应用
  6. Git详解之三 Git分支
  7. C程序调用shell脚本共有三种方法
  8. JAVA数据库处理(连接,数据查询,结果集返回)
  9. uva live 4394 String painter 间隔dp
  10. 从头编写 asp.net core 2.0 web api 基础框架 (1)
  11. Unknown system variable 'query_cache_size'] with root cause
  12. zabbix添加IIS网站计数器(并发连接数)详解
  13. Airtest iOS测试环境部署
  14. expect脚本实现ssh自动登录
  15. openzeppelin-solidity/contracts的代码学习——access
  16. 获取链接的参数,判断是否是微信打开,ajax获取数据
  17. Ubuntu中sublime和Foxit Reader不能使用中文输入法解决方案
  18. 第一个go的web程序;调用七牛云存储的音频api问题解决;条件搜寻文件中的内容,字符串拼接+在上一行
  19. [RTC]系统和RTC的时间保持一致
  20. 8. mybatis实战教程(mybatis in action)之七:实现mybatis分页(源码下载)

热门文章

  1. 第一百零七篇:基本数据类型(undefined,null,boolean类型)
  2. gorm
  3. [linux]非root账户 sudo cd 无法切换目录解决办法
  4. Guess Next Session
  5. Easy-Classification-验证码识别
  6. devexpress中searchLookUpEdit赋值不显示
  7. (Java)设计模式:创建型
  8. MyBatis-Plus 分页插件过时
  9. python3的可迭代对象与迭代器对象
  10. js-day05-对象