【学习日志】MongoDB为什么选择B树,而MySQL选择B+树实现索引
2024-09-08 07:30:09
先说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很多情况下用来存储日志,如果需要将日志分类存储,且对查询速度要求较高,可以通过物化视图,将同类的日志内容合并,提高查询速度。
最新文章
- [译] 理解PHP内部函数的定义(给PHP开发者的PHP源码-第二部分)
- 时钟周期,CPU周期,指令周期,CPU时间片
- centos7 安装jdk1.8
- python之路-Day3
- 矢量Chart图表嵌入HTML5网络拓扑图的应用
- Git详解之三 Git分支
- C程序调用shell脚本共有三种方法
- JAVA数据库处理(连接,数据查询,结果集返回)
- uva live 4394 String painter 间隔dp
- 从头编写 asp.net core 2.0 web api 基础框架 (1)
- Unknown system variable 'query_cache_size'] with root cause
- zabbix添加IIS网站计数器(并发连接数)详解
- Airtest iOS测试环境部署
- expect脚本实现ssh自动登录
- openzeppelin-solidity/contracts的代码学习——access
- 获取链接的参数,判断是否是微信打开,ajax获取数据
- Ubuntu中sublime和Foxit Reader不能使用中文输入法解决方案
- 第一个go的web程序;调用七牛云存储的音频api问题解决;条件搜寻文件中的内容,字符串拼接+在上一行
- [RTC]系统和RTC的时间保持一致
- 8. mybatis实战教程(mybatis in action)之七:实现mybatis分页(源码下载)