这个问题是我在看视频的时候老师提到的,虽然之前知道他们各自的索引结构但是还没有研究过原因。在网上一搜答案特别多。但是都特别的啰嗦。于是总结了这篇文章。

一、B-树和B+树的区别

很明显,我们要向弄清楚原因就要知道B-树和B+树的区别。为了不长篇大论。我们直接给出他们的形式总结他们的特点。

1、B-树

B-树是一种自平衡的搜索树,形式很简单:

这就是一颗B-树。针对我们这个问题的最核心的特点如下:

(1)多路,非二叉树

(2)每个节点既保存索引,又保存数据

(3)搜索时相当于二分查找

在这里我们假定都已经了解了B树相关的结构。

2、B+树

B+树是B-树的变种

最核心的特点如下:

(1)多路非二叉

(2)只有叶子节点保存数据

(3)搜索时相当于二分查找

(4)增加了相邻接点的指向指针。

从上面我们可以看出最核心的区别主要有俩,一个是数据的保存位置,一个是相邻节点的指向。就是这俩造成了MongoDB和Mysql的差别。为什么呢?

3、B-树和B+树的区别

(1)B+树查询时间复杂度固定是logn,B-树查询复杂度最好是 O(1)。

(2)B+树相邻接点的指针可以大大增加区间访问性,可使用在范围查询等,而B-树每个节点 key 和 data 在一起,则无法区间查找。

(3)B+树更适合外部存储,也就是磁盘存储。由于内节点无 data 域,每个节点能索引的范围更大更精确

(4)注意这个区别相当重要,是基于(1)(2)(3)的,B-树每个节点即保存数据又保存索引,所以磁盘IO的次数很少,B+树只有叶子节点保存,磁盘IO多,但是区间访问比较好。

有了他们的区别之后,现在我们再来解释这个原因就好多了。

二、原因解释

想要解释原因,我们还必须要了解一下MongoDB和Mysql的基本概念。

1、MongoDB

MongoDB 是文档型的数据库,是一种 nosql,它使用类 Json 格式保存数据。比如之前我们的表可能有用户表、订单表、购物篮表等等,还要建立他们之间的外键关联关系。但是类Json就不一样了。

我们可以看到这种形式更简单,通俗易懂。那为什么 MongoDB 使用B-树呢?

MongoDB使用B-树,所有节点都有Data域,只要找到指定索引就可以进行访问,无疑单次查询平均快于Mysql

2、Mysql

Mysql作为一个关系型数据库,数据的关联性是非常强的,区间访问是常见的一种情况,B+树由于数据全部存储在叶子节点,并且通过指针串在一起,这样就很容易的进行区间遍历甚至全部遍历。

这俩区别的核心如果你能看懂B-树和B+树的区别就很容易理解。

为什么 MongoDB 索引选择B-树,而 Mysql 选择B+树(精干总结)相关推荐

  1. mysql索引详讲_SQL优化 MySQL版 - B树索引详讲

    SQL优化 MySQL版  - -B树索引详讲 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] 为什么要进行SQL优化呢?很显然,当我们去写sql语句时: 1会发现性能低 2.执行时间太 ...

  2. mysql 什么树_搞懂MySQL InnoDB B+树索引

    一.InnoDB索引 InnoDB支持以下几种索引: B+树索引 全文索引 哈希索引 本文将着重介绍B+树索引.其他两个全文索引和哈希索引只是做简单介绍一笔带过. 哈希索引是自适应的,也就是说这个不能 ...

  3. MongoDB索引原理及实践

    背景 数据库的演进 随着计算机的发展,越来越多的数据需要被处理,数据库是为处理数据而产生.从概念上来说,数据库是指以一定的方式存储到一起,能为多个用户共享,具有更可能小的冗余,与应用程序彼此独立的数据 ...

  4. mysql -b -e_为什么 MongoDB 索引选择B-树,而 Mysql 索引选择B+树(精干总结)

    这个问题是我在看视频的时候老师提到的,虽然之前知道他们各自的索引结构但是还没有研究过原因.在网上一搜答案特别多.但是都特别的啰嗦.于是总结了这篇文章. 一.B-树和B+树的区别 很明显,我们要向弄清楚 ...

  5. mysql b树_为什么 MongoDB 索引选择B树,而 Mysql 选择B+树(精干总结)

    这个问题是我在看视频的时候老师提到的,虽然之前知道他们各自的索引结构但是还没有研究过原因.在网上一搜答案特别多.但是都特别的啰嗦.于是总结了这篇文章. 一.B树和B+树的区别 很明显,我们要想弄清楚原 ...

  6. mongodb mysql 知乎_为什么 MongoDB 索引选择B-树,而 Mysql 索引选择B+树(精干总结)...

    本文献给准备面试或者是还在面试的你.常见面试题,送分题目,不拿白不拿.本文收录在个人博客<愚公要移山>中,地址 www.javachat.cc 这篇是修改版,针对知乎上很多人提出的问题,进 ...

  7. 面试官常问:为什么 MongoDB 索引选择B-树,而 Mysql 索引选择B+树(精干总结)

    一.B树和B+树的区别 很明显,我们想向弄清楚原因就要知道B树和B+树的区别.为了不长篇大论.我们直接给出他们的形式总结他们的特点. 1.B树 B树是一种自平衡的搜索树,形式很简单: 这就是一颗B-树 ...

  8. Mysql InnoDB B+树索引和哈希索引的区别? MongoDB 为什么使用B-树?

    B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域. B+树 B+树是为磁盘及其他存储辅助设备而设计一种平衡查找树(不是二叉树).B+ ...

  9. 二叉树、B树(B-树)、B+树、B*树详解,以及为什么MySQL选择B+树做索引

    温故而知新,可以为师矣.看到一篇介绍B数和B减树的文章,这里记录一下. 1. 简要 众所周知,MySQL的索引使用了B+树的数据结构.那么为什么不用B树呢? 先看一下B树和B+树的区别. 2. 二叉树 ...

最新文章

  1. python如何并发上千个get_用greenlet实现Python中的并发
  2. 【数据结构与算法】之深入解析“二叉搜索树中的搜索”的求解思路与算法示例
  3. 1038. Recover the Smallest Number (30)
  4. Semaphore用法
  5. Logstash配置语法及相关命令
  6. C/C++混淆点-strcat和strcpy区别
  7. android shell强制删除文件夹_别再乱清手机内存了,删除这3个“特殊”文件夹!空间释放8GB...
  8. java基础知识点(2)—— 环境变量的配置
  9. 20135223何伟钦—信息安全系统设计基础第五周学习总结
  10. WPFの三种方式实现快捷键
  11. python:安装pycaret2.2.3(pytorch版本为1.7.1)
  12. C语言程序100例之C#版-029
  13. 揭秘 手机群控 带来的利益
  14. BackTrack5安装Vmware Tools
  15. 如何一键修改视频画面的尺寸大小呢?
  16. React使用本地svg图片配置
  17. Unity Shader - 水体交互
  18. PADS的layout单个元器件删除时提示“复用元素无法修改,首先打散复用模块”
  19. ArcGIS教程:克里金法的工作原理(二)
  20. 免费下载PPT的网站

热门文章

  1. java中的PO、BO、VO、QO、POJO、DTO、DAO分别代表什么意思
  2. Magnet:即将随 Apache Spark 3.2 发布的高性能外部 Shuffle 服务
  3. 如何自动删除您的YouTube历史记录
  4. 凯云水利水电造价工程系统 (三) 材料单价模块(1)
  5. 令牌桶算法的python实现,人人都可以玩算法
  6. PHP中 字符串 常用函数
  7. 远程控制电脑的软件哪个比较好用
  8. ubuntu 22.04 网易云
  9. [Java 内存]Java内存组成
  10. b、B、KB、MB、GB 的关系?