返回顶部
首页 > 资讯 > 数据库 >浅析MySQL索引结构采用B+树的问题
  • 905
分享到

浅析MySQL索引结构采用B+树的问题

mysql 索引B+树MySQL索引结构 2022-06-21 16:06:08 905人浏览 泡泡鱼
摘要

目录1、B树和B+树2、原因分析3、总结一位6年经验的小伙伴去字节面试的时候被问到这样一个问题,为什么Mysql索引结构要采用B+树?这位小伙伴从来就没有思考过这个问题。只因为现在都这么卷,后面还特意查了很多资料,他也希

一位6年经验的小伙伴去字节面试的时候被问到这样一个问题,为什么Mysql索引结构要采用B+树?这位小伙伴从来就没有思考过这个问题。只因为现在都这么卷,后面还特意查了很多资料,他也希望听听我的见解。

另外,我花了1个多星期把往期的面试题解析配套文档准备好了,一共有10万字,想获取的小伙伴可以在我的煮叶简介中找到。

1、B树和B+树

一般来说,数据库的存储引擎都是采用B树或者B+树来实现索引的存储。首先来看B树,如图所示。

浅析MySQL索引结构采用B+树的问题

B树是一种多路平衡树,用这种存储结构来存储大量数据,它的整个高度会相比二叉树来说,会矮很多。

而对于数据库而言,所有的数据都将会保存到磁盘上,而磁盘I/O的效率又比较低,特别是在随机磁盘I/O的情况下效率更低。

所以 高度决定了磁盘I/O的次数,磁盘I/O次数越少,对于性能的提升就越大,这也是为什么采用B树作为索引存储结构的原因,如图所示。

mysql的InnoDB存储引擎,它用了一种增强的B树结构,也就是B+树来作为索引和数据的存储结构。

相比较于B树结构来说,B+树做了两个方面的优化,如图所示。

浅析MySQL索引结构采用B+树的问题

1、B+树的所有数据都存储在叶子节点,非叶子节点只存储索引。

2、叶子节点中的数据使用双向链表的方式进行关联。

2、原因分析

我认为,Mysql索引结构采用B+树,有以下4个原因:

浅析MySQL索引结构采用B+树的问题

1、从磁盘I/O效率方面来看:B+树的非叶子节点不存储数据,所以树的每一层就能够存储更多的索引数量,也就是说,B+树在层高相同的情况下,比B树的存储数据量更多,间接会减少磁盘I/O的次数。

2、从范围查询效率方面来看:在MySQL中,范围查询是一个比较常用的操作,而B+树的所有存储在叶子节点的数据使用了双向链表来关联,所以B+树在查询的时候只需查两个节点进行遍历就行,而B树需要获取所有节点,因此,B+树在范围查询上效率更高。

3、从全表扫描方面来看:因为,B+树的叶子节点存储所有数据,所以B+树的全局扫描能力更强一些,因为它只需要扫描叶子节点。而B树需要遍历整个树。

4、从自增ID方面来看:基于B+树的这样一种数据结构,如果采用自增的整型数据作为主键,还能更好的避免增加数据的时候,带来叶子节点分裂导致的大量运算的问题。

3、总结

总体来说,我认为技术方案的选型,更多的要根据具体的业务场景来决定,并不一定是说B+树就是最好的选择,就像mongoDB里面采用B树结构,本质上来说,其实是关系型数据库和非关系型数据库的差异。

以上就是我对为什么MySQL索引结构采用B+树 的理解。

到此这篇关于浅析MySQL索引结构采用B+树的问题的文章就介绍到这了,更多相关mysql 索引B+树内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: 浅析MySQL索引结构采用B+树的问题

本文链接: https://lsjlt.com/news/33003.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 浅析MySQL索引结构采用B+树的问题
    目录1、B树和B+树2、原因分析3、总结一位6年经验的小伙伴去字节面试的时候被问到这样一个问题,为什么mysql索引结构要采用B+树?这位小伙伴从来就没有思考过这个问题。只因为现在都这么卷,后面还特意查了很多资料,他也希...
    99+
    2022-06-21
    mysql 索引B+树 MySQL索引结构
  • MySQL索引结构采用B+树的问题怎么理解
    这篇文章主要介绍了MySQL索引结构采用B+树的问题怎么理解的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL索引结构采用B+树的问题怎么理解文章都会有所收获,下面我们一起来看看吧。1、B树和B+树一般来...
    99+
    2023-07-02
  • MySQL 树形索引结构 B树 B+树 - G
    MySQL 树形索引结构 B树 B+树   如何评估适合索引的数据结构 索引的本质是一种数据结构 内存只是临时存储,容量有限且容易丢失数据。因此我们需要将数据放在硬盘上。 在硬盘上进行查询时也就产生了硬盘的I/O操作,而硬盘的I...
    99+
    2021-08-06
    MySQL 树形索引结构 B树 B+树 - G
  • mysql索引采用B+树结构的原因有哪些
    这篇文章将为大家详细讲解有关mysql索引采用B+树结构的原因有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。索引提高查询效率,就像我们看的书,想要直接翻到某一章,是...
    99+
    2024-04-02
  • MySQL-InnoDB为什么采用B+树结构实现索引
    索引的作用是提高查询效率,其实现方式有很多种,常见的索引模型有哈希表、有序列表、搜索树等。 哈希表 一种以key-value键值对的方式存储数据的结构,通过指定的key可以找到对应的value。 哈希把值放在数组里,用一个哈...
    99+
    2018-07-22
    MySQL-InnoDB为什么采用B+树结构实现索引
  • 浅谈MySQL的B树索引与索引优化小结
    MySQL的MyISAM、InnoDB引擎默认均使用B+树索引(查询时都显示为“BTREE”),本文讨论两个问题: 为什么MySQL等主流数据库选择B+树的索引结构? 如何基于索引结构,理解常见的...
    99+
    2024-04-02
  • MySQL的索引系统采用B+树的原因解析
    目录1.什么是索引?2.为什么需要索引?3.如何设计索引系统?4.MYSQL索引系统是什么呢?5.哈希表 6.树6.1 二叉树6.2 二分查找树(Binary Search...
    99+
    2024-04-02
  • MySQL索引的数据结构-B+树介绍
    1.聚集索引和辅助索引 在数据库中,B+树的高度一般都在24层,这也就是说查找某一个键值的行记录时最多只需要2到4次IO,这倒不错。因为当前一般的机械硬盘每秒至少可以做100次IO,24次的IO意味着查询时间只需要0.02~0.0...
    99+
    2017-02-08
    MySQL索引的数据结构-B+树介绍
  • MySQL使用B+树作为索引结构的原因
    这篇文章将为大家详细讲解有关MySQL使用B+树作为索引结构的原因,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、二叉查找树(BST):不平衡二叉查找树(BST,Bin...
    99+
    2024-04-02
  • MySQL中InnoDB索引数据结构(B+树)详解
    mysql的innodb的索引的B+树逐步讲解 B树B+树B树和B+树的不同点聚集索引 VS 非聚集索引总结(面试题)1.为什么不使用二叉查找树?2.为什么不使用平衡二叉树?3.为什么不使用B树?4.为什么MySQL选择B+树做索引...
    99+
    2023-08-17
    b树 数据结构 mysql 数据库
  • MySQL用B+树作为索引结构有什么好处
    前言 在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明MySQL为什么...
    99+
    2022-05-18
    MySQL 索引结构 MySQL b+树
  • MySQL B-tree与B+tree索引数据结构剖析
    目录一、产生的背景1.1 进化要求二、B-tree2.1 B-tree特性三、B+tree3.1 B+tree特性四、结论一、产生的背景 二叉查找树的查找时间复杂度是O(logN),整体的查询效率已经足够高了,那么为什么...
    99+
    2022-08-22
    MySQL B-tree MySQL B+tree MySQL索引数据结构剖析
  • mysql索引数据结构要用B+树的原因是什么
    这篇文章主要讲解了“mysql索引数据结构要用B+树的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql索引数据结构要用B+树的原因是什么”吧!1. Hash表?No因考虑到...
    99+
    2023-06-30
  • MySQL用B+树(而不是B树)做索引的原因
      https://www.jianshu.com/p/7ce804f97967 众所周知,MySQL的索引使用了B+树的数据结构。那么为什么不用B树呢? 先看一下B树和B+树的区别。 1.B树 维基百科对B树的定义为“在计算...
    99+
    2020-03-03
    MySQL用B+树(而不是B树)做索引的原因
  • 一文了解mysql索引的数据结构为什么要用B+树
    目录1. Hash表?No2. 二叉查找树(BST)?No3. 红黑树?No4. 平衡二叉树(AVL)?差那么二点意思5. B-tree(B-树也称B树)?差那么一点意思6. B+树...
    99+
    2024-04-02
  • 一步步分析为什么B+树适合作为索引的结构 以及索引原理
      https://www.cnblogs.com/aspirant/p/9214485.html 一步步分析为什么B+树适合作为索引的结构 以及索引原理    mysql的B+树索引 查找使用了二分查找,redis 跳表也使...
    99+
    2021-02-25
    一步步分析为什么B+树适合作为索引的结构 以及索引原理
  • MySQL中B+树索引的作用是什么
    本篇文章给大家分享的是有关MySQL中B+树索引的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。树的简介树的简介树跟数组、链表、堆栈...
    99+
    2024-04-02
  • MySQL索引结构的示例分析
    这篇文章将为大家详细讲解有关MySQL索引结构的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。简介在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,...
    99+
    2023-06-29
  • MySQL底层数据结构选用B+树的原因
           我们都知道MySQL底层数据结构是选用的B+树,那为什么不用红黑树,或者其他什么数据结构呢?         红黑树是一种自平衡二叉查找树,Java8中的hashmap...
    99+
    2024-04-02
  • MySQL的常用引擎为什么默认使用B+树作为索引
    本篇文章给大家分享的是有关MySQL的常用引擎为什么默认使用B+树作为索引,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、前言为了讲清楚这个...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作