iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >B+树详解,一次就懂
  • 155
分享到

B+树详解,一次就懂

b树数据结构mysql 2023-08-21 08:08:57 155人浏览 安东尼
摘要

⭐注意:不会直接讲 B+树的结构,会从最简单的二叉树开始讲起来。如果认真看完,我想你对树类型的数据结构的理解又上了一个新的台阶。 ⭐如果有误,请大家指出。下文均是在B站学习的过程中,总结的笔记和心得体会 索引结构 Mysql索引是在

⭐注意:不会直接讲 B+树的结构,会从最简单的二叉树开始讲起来。如果认真看完,我想你对树类型的数据结构的理解又上了一个新的台阶。
⭐如果有误,请大家指出。下文均是在B站学习的过程中,总结笔记和心得体会

索引结构

Mysql索引是在 存储引擎层 实现的,不同的存储引擎层,有不同的索引结构,主要包含四种索引:

名称简介
B+树索引最常见的索引类型
Hash索引底层是由 哈希表 实现 (⭐性能很强,但是!不支持范围查询)
空间索引(R-tree)是 MyISAM 引擎 的一个特殊索引类型,主要用于地理空间数据类型
全文索引(Full-text)通过建立倒排索引方式,来快速匹配文档。

我们会从 二叉树 到 B+树




1、二叉树


  • 二叉树,实际上就是一个简单的树形数据结构,本身没有什么意义。后来,规定了二叉树的插入顺序,让左子节点的元素永远小于右子节点。这种二叉树,可以快速的查询到某一个元素。

    在这里插入图片描述

    就这样, 二叉搜索树 诞生了。

    • 在理想情况下,二叉树每多一层,可以存储的元素都增加一倍。那么 n个元素的二叉搜索树,对应的树高为log(n)。所以我们查找元素、插入元素的时间也为log(n)。

    • 在不理想的情况下,每个节点元素顺序插入,所有的元素会线性排列,树形结构会退化成链表,就会形成如下图的结构,这样导致查询效率翻倍,为O(n) ———— 二叉搜索树不平衡的问题

    在这里插入图片描述

    • (红黑树,自平衡的二叉树)





2、B 树


1. 多叉搜索树

  1. 上面我们知道了二叉搜索树,实际上多叉树和二叉树的区别就是: 多叉搜索树中的节点,可以存储多个元素。这样,导致多叉搜索树有多个分支
    在这里插入图片描述

  2. 问题:二叉搜索树可以完成节点的高效增删改查,为啥会有多叉树的出现?

  • 即 二叉搜索树不平衡的问题,当数量足够大时,树的深度会越深,查询效率就会越低。
  • 数据库存储中,树是一种常用的数据结构,其数据会存储在硬盘,那么每一次数据的读写都会在磁盘上进行读写,这一过程非常耗时。
  • 树的深度越大,那么磁盘读写的次数越多,带来的io开销也越大 (所以设计出了 B树,B树是多叉树的一种)

2. B 树

也叫 多路平衡查找树,实际上就是一颗多叉搜索树



B+ 树


和B 树类似,不过做了一些改变

在这里插入图片描述

  • B+ 树 的特点 ( 从图中看 )

    1. B+ 树的所有元素(数据),全部存放在叶子节点,即 所有的元素都会出现在叶子节点 。(B树 叶子节点和非叶子节点都存储数据)

      • B树 的叶子节点、非叶子节点保存的是数据
      • B+树 的非叶子节点是不保存数据的,只起到索引作用,它的叶子节点才保存数据。

    2. 非叶子节点,不存储数据,起到一个索引的作用

    3. B+ 树 的数据结构中,叶子节点之间形成了单向链表。每一个节点的指针,通过叶子节点指向下一个元素。




B+ 树(mysql


Mysql中的 B+ 树,对经典的B+ 树结构进行了一个优化。在原基础上,叶子节点又增加了一条相邻叶子节点的指针。
在这里插入图片描述

  • 从图中可以看到,和 经典的B+树,结构大致一致。唯一不同的是,叶子节点之间形成了双向链表。



Hash索引

  • 图详解:
    • 看左边的表,我们 对 name 字段创建了 Hash索引,并查找 杨逍
    • 首先对 name 采用 hash算法,得到hash值。通过生成的 hash值,映射到槽位 (杨逍,005)。
    • 图中不难看到,005的位置,产生了 hash冲突
    • 我们再对比 005槽位上链表的每一个元素,即可拿到值
  • 特点

    1. 只能用于等值比较(=,in),不支持范围查询(between,>,< … )
    2. 无法利用索引完成排序操作
    3. 查询效率高(在索引中,查询小路是最高的)。在理想情况下,只需要检索一次(不发生Hash冲突的情况下)
  • Memory引擎,支持Hash索引,其他不支持。但是,InnoDB引擎 有自适应 hash 功能,会根据查询条件 自动的将 B+树索引,构建为Hash索引

来源地址:https://blog.csdn.net/qq_41076531/article/details/128315421

您可能感兴趣的文档:

--结束END--

本文标题: B+树详解,一次就懂

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

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

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

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

下载Word文档
猜你喜欢
  • B+树详解,一次就懂
    ⭐注意:不会直接讲 B+树的结构,会从最简单的二叉树开始讲起来。如果认真看完,我想你对树类型的数据结构的理解又上了一个新的台阶。 ⭐如果有误,请大家指出。下文均是在B站学习的过程中,总结的笔记和心得体会 索引结构 MySQL索引是在 ...
    99+
    2023-08-21
    b树 数据结构 mysql
  • MySQL中B树索引和B+树索引的区别详解
    目录1. 多路搜索树2. B树-多路平衡搜索树3. B树索引4. B+树索引总结如果用树作为索引的数据结构,每查找一次数据就会从磁盘中读取树的一个节点,也就是一页,而二叉树的每个节点...
    99+
    2024-04-02
  • 详解Python中的切片(一看就懂版)
    前言 在我们使用Python的时候,经常会听到“切片”这个词!那什么是切片呢?切片是对序列数据(列表、元组、字符串),根据下标索引,对一定范围内数据的获取。 简单来说就是,通过下标索引获取一定范围内的...
    99+
    2023-08-31
    python numpy 开发语言
  • 关于Java的二叉树、红黑树、B+树详解
    目录1、二叉查找树2、平衡二叉查找树3、红黑树:4、 B树:5、 B+树6、红黑树 VS B+树数组和链表是常用的数据结构,数组虽然查找快(有序数组可以通过二分法查找),但是插入和删...
    99+
    2023-05-20
    Java二叉树 Java红黑树 JavaB+树
  • C/S、B/S架构详解,一文带你搞懂
    一、CS、BS架构定义   CS架构(Client-Server Architecture)是一种分布式计算模型,其中客户端和服务器之间通过网络进行通信。在这种架构中,客户端负责向服务器发送请求,并接收服务器返回的响应。服务器则负责处理客...
    99+
    2023-09-05
    网络 服务器 前端
  • 一看就懂的i++和++i示例代码详解
    目录一看就懂的i++和++i详解前言示例代码示例1示例2示例3示例4示例5示例答案i++ 和 ++i原理i++字节码分析表达式原则示例答案详解示例1详解示例2详解示例3详解示例4详解...
    99+
    2023-03-01
    i++和++i区别 i++和++i
  • 详解B树删除操作:使用Python实现B树删除操作的详细图解
    B树删除操作需要考虑节点所在位置和平衡,并且很有可能会发生下溢的情况。当一个节点包含的子节点数量少于它应该持有的最小数量时,就会发生下溢。 图文展示B树删除操作原理 在不影响平衡情况下。 下溢情况。 删除内部节点。 Python实...
    99+
    2024-01-22
    B树的概念
  • Java小白第一次就能看懂的网络编程
    目录一、网络基础二、网络协议URL类一、网络基础 二、网络协议 实现TCP的网络编程 例子1:客户端发送信息给服务端,服务端将数据显示在控制台上 public cl...
    99+
    2024-04-02
  • Discuz论坛搭建详细过程,一看就懂
    说明:本实验在虚拟机中进行,所使用的软件是VMware Workstation Pro16; 使用的是rhel-server-8.2-x86_64-dvd的镜像文件,搭建论坛的安装包为Discuz_X3.4_SC_UTF8.zip。 1.首...
    99+
    2023-09-10
    linux 数据库 php
  • 详解B+树的原理及实现Python代码
    B+树是自平衡树的高级形式,其中所有值都存在于叶级中。B+树所有叶子都处于同一水平,每个节点的子节点数量≥2。B+树与B树的区别是各节点在B树上不是相互连接,而在B+树上是相互连接的。 B+树多级索引结构图 B+树搜索规则 1、从...
    99+
    2024-01-24
    B树的概念
  • 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+树的查询时间复杂度
    前言 B+ 树搜索时间复杂度到底是什么(这篇文章分析了全网各种关于b+树时间复杂度相关博客的结论,总结并分析了他们结论差异的原因)。 本文在此基础上,对文中的结论做了进一步思考(如果对解题过程不感兴趣...
    99+
    2023-09-04
    mysql 数据库 b+树
  • 关于MySQL B+树索引与哈希索引详解
    目录索引介绍B+树索引优点缺点哈希索引优点缺点补充:二者区别总结 索引介绍 索引是一种特殊的数据库结构,被设计用来快速查询数据库表中的特定记录。索引有多种类型,就像字典有拼...
    99+
    2024-04-02
  • 最通俗易懂的TCP三次握手四次挥手详解
    TCP的三次握手和四次挥手实质就是TCP通信的连接和断开。 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。 四次挥手:即终止TCP连接,...
    99+
    2023-09-04
    tcp/ip 网络 服务器
  • 解读MySQL中一个B+树能存储多少数据
    目录mysql中一个B+树能存储多少数据MySQL聚簇索引的存储结构MySQL中B树与B+树的区别B树B+树B树与B+树的区别总结MySQL中一个B+树能存储多少数据 MySQL聚簇索引的存储结构 MySQL中Inno...
    99+
    2023-02-14
    MySQL B+树 B+树存储数据 MySQL B+树存储数据
  • 看过就懂的java零拷贝及实现方式详解
    目录前言1.什么是零拷贝2. 传统 IO 的执行流程3. 零拷贝相关的知识点回顾3.1 内核空间和用户空间3.2 什么是用户态、内核态3.3 什么是上下文切换3.4 虚拟内存3.5 ...
    99+
    2024-04-02
  • 一文搞懂关于 sys.argv 的详解
    目录详解 sys.argvps:sys.argv[]的用法一、介绍二、简单的例子三、输入为 --numa=1  --numb=2 形式和  --numa...
    99+
    2023-01-15
    sys.argv 是什么 python sys.argv sys.argv[]的用法
  • Nginx详解(一文带你搞懂Nginx)
    前言 最近进入了新篇章的学习,Nginx,特写下详细笔记与大家共享。 目录 前言一、Nginx是什么?二、Nginx的反向代理(扩展:正向代理)三、Nginx的负载均衡什么是负载均衡? 四、Nginx的动静分离!五、Nginx的...
    99+
    2023-08-30
    nginx 服务器
  • JAVA注解代码详解一篇就够了
    目录一、java内置注解1、@Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:1、元注解1.1、@Retention: 定义注解的保留策略1.2、@...
    99+
    2024-04-02
  • Yolov8原理详细解析!一文看懂
    引言 Yolo(You Only Look Once)是一种one-stage目标检测算法,即仅需要 “看” 一次就可以识别出图片中物体的class类别和边界框。Yolov8是Ultralytics公司最新推出的Yolo系列目标检测算法,可...
    99+
    2023-08-30
    Yolov8 目标检测 AI网络
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作