索引原理对比
MongoDB B-树
- 每个节点不仅存储实际数据,还保存索引信息
- 查询时一旦在节点找到匹配的键值,就可以直接获取数据
- 对于精确查询(如 find({_id:123})),效率很高
- 范围查询效率相对较低
MySQL B+树
- 所有数据存储在叶子节点
- 叶子节点之间通过双向指针连接形成有序链表
- 范围查询非常高效
- 非叶子节点只存储索引键,不存储数据
两者区别
数据存储方式
- MySQL:采用行式存储,数据以固定的表结构存储
- MongoDB:采用文档存储,数据以BSON文档形式存储
数据关联方式
- MySQL:通过外键建立表间关系,支持JOIN操作
- MongoDB:通过引用或嵌入式文档实现数据关联
B+树与B-树的区间查询性能对比
B+树优势:
- 叶子节点间的指针连接可以高效支持范围查询
- 只需定位到起始键值节点,然后沿指针顺序遍历
B-树劣势:
- 节点间没有额外的链接指针
- 范围查询需要反复执行树遍历操作
外存存储结构优化
B+树优势:
- 非叶子节点只存储索引键,单个节点可容纳更多索引项
- 磁盘预读能被更好利用
树深度与I/O效率:
- B-树适合随机点查询,最坏情况只需3-4次磁盘I/O
- B+树顺序访问性能极佳,适合全表扫描、范围查询