B+树

  • B+树介绍
  • 硬盘介绍
    • 盘片(platter)、盘面(side)、读写磁头(head)
    • 磁道(track)、扇区(sector)
    • 柱面(cylinder)
    • 磁盘块
    • 操作系统读取硬盘数据的过程
    • 磁盘完成IO操作的时间
  • 查看硬盘信息
  • MySQL的索引底层为何使用B+树?
  • B树 与 B*树

数据结构与算法笔记:恋上数据结构笔记目录

B+树介绍

B+树 是 B树 的变体,常用于数据库和操作系统的文件系统

  • MySQL数据库的索引就是基于 B+树 实现的

B+树的特点:

  • 分为内部节点非叶子)、叶子节点 2 种节点;
    内部节点只存储 key,不存储具体数据
    叶子节点存储 key 和具体数据
  • 所有的叶子节点形成一条有序链表;
  • m 阶 B+树 非根节点的元素数量 x:┌ m/2 ┐ ≤ x ≤ m

关于MySQL发音的官方说明
https://dev.mysql.com/doc/refman/8.0/en/what-is-mysql.html
The official way to pronounce “MySQL” is “My Ess Que Ell” (not “my sequel”),
but we do not mind if you pronounce it as “my sequel” or in some other localized way.

硬盘介绍

市面上常见的硬盘有:

  • 机械硬盘(Hard Disk Drive,HDD)
  • 固态硬盘(Solid State Drive,SSD)


后面的介绍针对机械硬盘

盘片(platter)、盘面(side)、读写磁头(head)

硬盘一般由多个盘片组成,每个盘片包含2个盘面,每个盘面有1个对应的读写磁头:盘面、磁头由上到下从0开始编号;

磁道(track)、扇区(sector)

盘面中的一圈圈灰色圆环为是一条条的磁道:磁道由外到内从0开始编号;

每条磁道上的一个弧段叫做一个扇区

  • 扇区是磁盘的最小读写单位
  • 一个扇区的大小通常是 512 字节(也有 4096 字节的)

早期硬盘的扇区细节
每条磁道的扇区数相同

  • 所以外圈扇区的面积会比内圈扇区大

为了更好的读取数据,它们会存放相同的字节数

  • 所以外圈扇区的记录密度要比内圈小,会浪费大量的存储空间

硬盘的存储容量 = 磁头数 * 盘面磁道数 * 磁道扇区数 * 扇区字节数

柱面(cylinder)

相同编号的磁道形成一个圆柱,称为柱面

  • 磁盘的柱面数与一个盘面的磁道数是相等的

磁盘块

磁盘块,在Windows中叫做 簇(cluster),在Linux中叫做 块( block )

  • 相邻的 2n 个扇区组合在一起,形成一个磁盘块
  • 操作系统对磁盘进行管理时,以磁盘块作为最小读写单位

注意

  • 磁盘块是操作系统中的一个虚拟概念
  • 扇区是磁盘上真实存在的物理区域

操作系统读取硬盘数据的过程

  1. 操作系统将 LBA 传送给磁盘驱动器并启动读取命令;
    LBA(Logical Block Address,逻辑块地址
    比如类似设备号4、磁头号4、磁道号8、扇区号16、扇区计数8这样的信息。
  2. 磁盘驱动器根据 LBA 将磁头移动到正确的磁道,盘片开始旋转,将目标扇区旋转到磁头下;
  3. 磁盘控制器将扇区数据等信息传送到一个处于磁盘界面的缓冲区;
  4. 磁盘驱动器向操作系统发出“数据就绪”信号;
  5. 操作系统从磁盘界面的缓冲区读取数据;
    既可以按照一个字节一个字节的方式读取,
    也可以启动 DMA(Direct Memory Access,直接内存访问)命令读取。

磁盘完成IO操作的时间

主要由寻道时间旋转延迟时间数据传输时间 3 部分构成:

  • 寻道时间(seek):软件
    将读写磁头移动至正确的磁道上所需要的时间,这部分时间代价最高
  • 旋转延迟时间(rotation):硬件
    盘片旋转将目标扇区移动到读写磁头下方所需要的时间,取决于磁盘转速
  • 数据传输时间(transfer):硬件
    完成传输数据所需要的时间,取决于接口的数据传输率,通常远小于前两部分消耗时间

决定时间长短的大部分因素是和硬件相关的,但所需移动的磁道数是可以通过操作系统来进行控制

  • 减少所需移动的磁道数是减少整个硬盘读写时间的有效办法
  • 合理安排磁头的移动以减少寻道时间就是磁盘调度算法的目的所在

查看硬盘信息

Windows

  • 如果是查看D盘,管理员权限打开命令行工具,输入fsutil fsinfo ntfsinfo d:
  • 或者搜索框输入:系统信息

MySQL的索引底层为何使用B+树?

为了减小 IO操作 数量,一般把一个节点的大小设计成最小读写单位的大小

  • MySQL 的存储引擎 InnoDB 的最小读写单位是 16K

对比B树,B+树的优势是:

  • 每个节点存储的 key 数量更多,树的高度更低
  • 所有的具体数据都存在叶子节点上,所以每次查询都要查到叶子节点,查询速度比较稳定
  • 所有的叶子节点构成了一个有序链表,做区间查询时更方便
    例如查询某个范围内的数据,找到头结点后再通过链表往后找即可。

B树 与 B*树

B树:

B*树 是 B+树 的变体:给内部节点增加了指向兄弟节点的指针;

  • m阶 B*树 非根节点的元素数量 x:┌ 2m/3 ┐ ≤ x ≤ m

【恋上数据结构】MySQL的索引底层为何使用 B+树?相关推荐

  1. MJ恋上数据结构(第1季 + 第2季)笔记

    文章转载自:https://blog.csdn.net/weixin_43734095/article/details/104847976 恋上数据结构完整笔记(第1季 + 第2季) 前言 数据结构 ...

  2. 《恋上数据结构第1季》二叉堆原理及实现、最小堆解决 TOP K 问题

    二叉堆 BinaryHeap 堆(Heap) 堆的出现 堆简介 二叉堆(Binary Heap) 获取最大值 最大堆 - 添加 最大堆 - 添加优化 最大堆 - 删除 replace 最大堆 - 批量 ...

  3. 《恋上数据结构第1季》队列、双端队列、循环队列、循环双端队列

    队列(Queue) 队列 Queue 队列的接口设计 队列源码 双端队列 Deque 双端队列接口设计 双端队列源码 循环队列 Circle Queue 循环队列实现 索引映射封装 循环队列 – %运 ...

  4. 基数排序及其思想 C++代码实现及分析 恋上数据结构笔记

    文章目录 复习梗概 算法思想 时间及空间复杂度 基数排序基础版代码 及输出结果 计数排序函数 基数排序函数 可视化输出 另一种思路 完整版代码 复习梗概 思想 如何取数字各个位位数 计数排序保证稳定性 ...

  5. 计数排序及其改进 C++代码实现与分析 恋上数据结构笔记

    文章目录 复习梗概 算法思想 基础思想 改进空间复杂度,改进不能对负数进行排序问题 改进稳定性 计数排序时间空间复杂度 计数排序基础版 代码及输出 计数排序第一次改进版 代码及输出 计数排序终极版 代 ...

  6. 插入排序算法 及其二分搜索优化版 C++代码实现 恋上数据结构笔记

    复习梗概 文章目录 复习梗概 插入排序算法思想 插入排序时间复杂度与特性(多少,与什么有关?) 插入排序基础版 插入排序2nd优化版(优化了哪里?) !!!插入排序二分搜索优化版(优化了哪里?如何优化 ...

  7. 堆排序 C++代码实现及思想 排序过程输出 恋上数据结构笔记

    复习梗概 文章目录 复习梗概 什么是堆思想? 堆排序算法怎么来的? 什么是下滤?代码 什么是建堆?代码 堆排序本体 代码及排序过程输出 和时间复杂度 完整代码 什么是堆思想? 最大堆:树形结构,每一个 ...

  8. 【恋上数据结构】串匹配算法(蛮力匹配、KMP【重点】、Boyer-Moore、Karp-Rabin、Sunday)

    串(Sequence) 串(前缀.后缀) 串匹配算法 蛮力(Brute Force) 蛮力1 – 执行过程 + 实现 蛮力1 – 优化 蛮力2 – 执行过程 + 实现 蛮力 – 性能分析 KMP 蛮力 ...

  9. 【恋上数据结构】布隆过滤器(Bloom Filter)原理及实现

    布隆过滤器(Bloom Filter) 引出布隆过滤器(判断元素是否存在) 布隆过滤器介绍(概率型数据结构) 布隆过滤器的原理(二进制 + 哈希函数) 布隆过滤器的误判率(公式) 布隆过滤器的实现 布 ...

最新文章

  1. [解题报告] The Collatz Sequence
  2. mysql按周统计_MySQL按周统计 WEEK 实例
  3. 处理android11以上无法删除相册图片的问题
  4. 利用反射自动封装成实体对象
  5. [渝粤教育] 四川农业大学 理论力学 参考 资料
  6. 使用maxwell实时同步mysql数据到kafka
  7. Android 系统(173)---Android中图片的三级缓存
  8. java代理模式与反射机制
  9. 电子信息技术专业名词中英文对照(三)
  10. Gartner:细分分析如何提高销售预测的准确性?
  11. 人脸识别撞脸名画_人脸识别_“名画匹配”刷爆屏 想知道你和哪副名画撞脸了吗...
  12. 计算机操作知识 p?p?t,计算机初级基本操作
  13. android 图表实现,Android实现图表绘制和展示
  14. 【杂烩】各种MarkDown 符号
  15. 如何从海量用户发布的内容中挖掘出各城市时下的最热话题
  16. 融金所孙明达:“科技+政策”双轮驱动普惠金融
  17. 网络java教学_Java基础教程——网络基础知识
  18. 统计学习模型——决策树
  19. 在计算机桌面上的回收站作用是,计算机桌面回收站的设置(回收站的概念及设置、使用说明)...
  20. 用友u8计算机快捷键,用友U8快捷键一览表

热门文章

  1. 普通人,如何实现年收入百万?
  2. 赚钱的基本逻辑就是价值交换
  3. 何时使用 Golang
  4. 层次分析法模型及代码
  5. Python脚本可在Microsoft Excel中格式化数据
  6. sql server 数组_如何在SQL Server中实现类似数组的功能
  7. Google Cloud Platform中没有Active Directory域的可用性组
  8. ssis 表达式任务_在SSIS中执行SQL任务:SqlStatementSource表达式与可变源类型
  9. Django项目:CRM(客户关系管理系统)--83--73PerfectCRM实现CRM模板统一
  10. IDEA快捷键生成serialVersionUID