索引原理对比

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+树顺序访问性能极佳,适合全表扫描、范围查询