广告
返回顶部
首页 > 资讯 > 数据库 >mysql索引采用B+树结构的原因有哪些
  • 370
分享到

mysql索引采用B+树结构的原因有哪些

2024-04-02 19:04:59 370人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关Mysql索引采用B+树结构的原因有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。索引提高查询效率,就像我们看的书,想要直接翻到某一章,是

这篇文章将为大家详细讲解有关Mysql索引采用B+树结构的原因有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

索引提高查询效率,就像我们看的书,想要直接翻到某一章,是不是不用一页一页的翻,只需要看下目录,根据目录找到其所在的页数即可。

在计算机中我们需要一种数据结构来存储这个目录,常见数据结构有哈希表,二叉查找树,二叉平衡树(AVL),红黑树,那为什么Innodb和MyISAM选择b+树呢。

1. 哈希表

哈希表就是一个数组+链表,用下标0,1,2,3..... 表示其数据所在的位置。如果想要在哈希表中存放数据,首先用对这个数据进行散列算法(基本的就是取模运算),假如数组长度是13 ,进行模13之后是0-12,正好对应的数据的下标,如果计算出的下标一样的,就会在下标位置跟上链表。

mysql索引采用B+树结构的原因有哪些

缺点:

  1. 利用hash存储需要将所有的数据文件添加到内存,比较消耗内存空间。

  2. hash的查找是等值查询,速度很快,但是各个数据间没有范围规律,但在实际工作中更多的是范围查询,hash就不太合适了。

不能直接说mysql不使用哈希表,而是要根据存储引擎来确定的,Memory存储引擎使用的就是哈希表

2. 二叉查找树

mysql索引采用B+树结构的原因有哪些

缺点:

  1. 如图,极端情况可能会出现倾斜的问题,最后变成链表结构。

  2. 造成树节点过深,从而增加查找的io,而现在IO就是查找的瓶颈

3. 二叉平衡树-AVL

为了保持树的平衡,避免出现数据倾斜,需要进行旋转操作,通过左旋或者右旋最终保持最长子树和最短子树长度不能超过1,如果超过1就不是严格意义上AVL树了

mysql索引采用B+树结构的原因有哪些

缺点:

1.当数据量很大的时候,为了保持平衡,需要进行1-n次的旋转,这个旋转是比较浪费性能的,插入和删除效率极低,查询效率很高。

  1. 只有两个分支,数据量大的时候树的深度依然很深。

4. 红黑树

最长子树的不能超过最短子树的2倍,通过变色和旋转,在插入和查询上做了平衡

红黑树是avl树的变种,损失了部分查询性能来提高插入性能。

mysql索引采用B+树结构的原因有哪些

缺点:

同样是只有两个分支,数据量大的时候深度依然会很深

以上三种二叉树,随着数据的增多,最终都会出现节点过多的情况,而且他们有且仅有2个分支,那么IO的次数一样很多.

怎么解决仅有2个分支而且深度过深,这就有了B树,增加分支

5. B-Tree
  1. 首先不读B减树,读B树

  2. 所有键值分布在整棵树中。

  3. 搜索有可能在非叶子结点结束,在关键字全集内做一次查找,性能逼近二分查找。

  4. 每个结点最多拥有m个子树。

  5. 根节点至少有2个子树。

  6. 分支节点至少拥有m/2棵子树(除根节点和叶子节点外都是分支节点)。

  7. 所有叶子节点都在同一层,每个节点最多可以有m-1个key,并且以升序排列

mysql索引采用B+树结构的原因有哪些

如上图:(图中只是画出来一部分,实际上没有限制的,不止p1,p2,p3)

每个节点占用一个磁盘块,一个节点上有两个升序排列的关键字和三个指向子树根节点的指针,指针存储的是子节点所在的磁盘块地址。两个关键词划分成的三个范围域对应三个指针指向的子树的数据的范围域。以根节点为例,关键字为16和34,p1指针指向的子树的数据范围小于16,p2指针指向的子树的数据范围为16-34,p3指针指向的子树的数据范围大于34。

查找关键字28的过程:

  1. 根据根节点找到磁盘块1,读到内存中。【第一次磁盘I/O操作】

  2. 比较关键字28在区间(16,34),找到磁盘块1的指针p2。

  3. 根据p2指针找到磁盘块3,读到内存。【第二次磁盘I/O操作】

  4. 比较关键字28在区间(25,31),找到磁盘块3的指针p2。

  5. 根据指针p2找到磁盘块8,读到内存。【第三次磁盘I/O操作】

  6. 在磁盘块8中的关键字列表中找到关键字28,结束。

缺点:

  1. 每个节点都有key,同时包含data,而每个页存储空间是有限的,如果data很大的话会导致每个节点能存储的key的数量变小。

  2. 当存储的数据量很大的时候会导致深度变大,增加查询磁盘的io次数,进而影响查询性能。

6. B+树

B+树是在B树的基础上做的一种优化,变化如下:

  1. B+树每个节点可以包含更多的节点,这个做的原因有两个,第一个原因是为了降低树的高度,第二个原因是将数据范围变成多个区间,区间越多,数据检索越快。

  2. 非叶子节点只存储key,叶子节点存储key和数据。

  3. 叶子节点两两指针互相连接(符合磁盘预读的特性),顺序查询性能更高。

mysql索引采用B+树结构的原因有哪些

如上图: 在B+树上有两个头指针,一个指向根节点,另一个指向关键字的最小叶子节点,而且所有叶子节点(及数据节点)之间是一种链式环结构,因此可以对B+树进行两种查找运算:一种是对于主键的范围查找和分页查找,另一种是从根节点开始的随机查找。

InnoDB和MyISAM中索引上的差异

1. InnoDB-主键索引

叶子节点存储的是具体的行数据

mysql索引采用B+树结构的原因有哪些

2. InnoDB-非主键索引

非主键索引的叶子节点存储的是主键值(所以查询数据基本要回表)

mysql索引采用B+树结构的原因有哪些

3. MyISAM

叶子节点存储的是行数据的地址,额外需要一次寻址,多一次IO

mysql索引采用B+树结构的原因有哪些

关于“mysql索引采用B+树结构的原因有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: mysql索引采用B+树结构的原因有哪些

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql索引采用B+树结构的原因有哪些
    这篇文章将为大家详细讲解有关mysql索引采用B+树结构的原因有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。索引提高查询效率,就像我们看的书,想要直接翻到某一章,是...
    99+
    2022-10-18
  • MySQL使用B+树作为索引结构的原因
    这篇文章将为大家详细讲解有关MySQL使用B+树作为索引结构的原因,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、二叉查找树(BST):不平衡二叉查找树(BST,Bin...
    99+
    2022-10-18
  • 浅析MySQL索引结构采用B+树的问题
    目录1、B树和B+树2、原因分析3、总结一位6年经验的小伙伴去字节面试的时候被问到这样一个问题,为什么mysql索引结构要采用B+树?这位小伙伴从来就没有思考过这个问题。只因为现在都这么卷,后面还特意查了很多资料,他也希...
    99+
    2022-06-21
    mysql 索引B+树 MySQL索引结构
  • MySQL的索引系统采用B+树的原因解析
    目录1.什么是索引?2.为什么需要索引?3.如何设计索引系统?4.MYSQL索引系统是什么呢?5.哈希表 6.树6.1 二叉树6.2 二分查找树(Binary Search...
    99+
    2022-11-12
  • mysql索引数据结构要用B+树的原因是什么
    这篇文章主要讲解了“mysql索引数据结构要用B+树的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql索引数据结构要用B+树的原因是什么”吧!1. Hash表?No因考虑到...
    99+
    2023-06-30
  • MySQL-InnoDB为什么采用B+树结构实现索引
    索引的作用是提高查询效率,其实现方式有很多种,常见的索引模型有哈希表、有序列表、搜索树等。 哈希表 一种以key-value键值对的方式存储数据的结构,通过指定的key可以找到对应的value。 哈希把值放在数组里,用一个哈...
    99+
    2018-07-22
    MySQL-InnoDB为什么采用B+树结构实现索引
  • 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+树的问题怎么理解
    这篇文章主要介绍了MySQL索引结构采用B+树的问题怎么理解的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL索引结构采用B+树的问题怎么理解文章都会有所收获,下面我们一起来看看吧。1、B树和B+树一般来...
    99+
    2023-07-02
  • MySQL使用B树的原因有哪些
    这篇文章主要介绍MySQL使用B树的原因有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁...
    99+
    2022-10-19
  • mysql 使用B+树索引有哪些优势
    搞懂这个问题之前,我们首先来看一下MySQL表的存储结构,再分别对比二叉树、多叉树、B树和B+树的区别就都懂了。 MySQL的存储结构 表存储结构 单位:表>段>区>页>行 在数据库中, ...
    99+
    2022-05-25
    MySQL b+树索引 MySQL b+树索引优势
  • MySQL用B+树作为索引结构有什么好处
    前言 在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明MySQL为什么...
    99+
    2022-05-18
    MySQL 索引结构 MySQL b+树
  • MySQL底层数据结构选用B+树的原因
           我们都知道MySQL底层数据结构是选用的B+树,那为什么不用红黑树,或者其他什么数据结构呢?         红黑树是一种自平衡二叉查找树,Java8中的hashmap...
    99+
    2022-11-12
  • MySQL数据库索引选择使用B+树的原因是什么
    这篇文章主要介绍MySQL数据库索引选择使用B+树的原因是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、二叉查找树(1)二叉树简介:二叉查找树也称为有序二叉查找树,满足二叉查...
    99+
    2022-10-18
  • 一文了解mysql索引的数据结构为什么要用B+树
    目录1. Hash表?No2. 二叉查找树(BST)?No3. 红黑树?No4. 平衡二叉树(AVL)?差那么二点意思5. B-tree(B-树也称B树)?差那么一点意思6. B+树...
    99+
    2022-11-13
  • mysql索引失效的常见原因有哪些
    本篇内容介绍了“mysql索引失效的常见原因有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:MySQL中提高性能的一个最有效的方式...
    99+
    2023-06-30
  • MySQL使用B+Tree当索引的优势有哪些
    数据库为什么需要索引呢? 我们都是知道数据库的数据都是存储在磁盘上的,当我们程序启动起来的时候,就相当于一个进程运行在了机器的内存当中。所以当我们程序要查询数据时,必须要从内存出来到磁盘里面去查找数据,然后将数据写...
    99+
    2022-05-26
    MySQL 索引 MySQL B+tree MySQL B+tree索引优势
  • mysql索引的使用原则有哪些
    这篇文章将为大家详细讲解有关mysql索引的使用原则有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、最左前缀原则。一个联合索引(a,b,c),如果有一个查询条件是a,有b,那么他就走索引,如果有一...
    99+
    2023-06-15
  • mysql索引失效的原因及解决方法有哪些
    MySQL索引失效的原因及解决方法有以下几个方面:1. 索引选择不当:MySQL根据查询的条件和数据分布情况来选择使用哪个索引。如果查询的条件与索引不匹配或者数据分布不均匀,就会导致索引失效。解决方法是优化查询语句,使用合适的索引。2....
    99+
    2023-08-09
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作