1. 存储底层

1.1 硬盘

这里主要解释的是机械硬盘,理解了如何进行IO才能更好的清除MySQL使用B+树的优势。

Mysql磁盘子系统 mysql磁盘块_mysql

  • 机械硬盘整体结构:硬盘由多个盘片组成,每个盘片包含两个盘面,每个盘面有一个对应的读写磁头(由上到下从0开始编号),。
  • 盘面:盘面中灰色的圆环是一条条的磁道(由内到外从0开始编号);每条磁道上的一个弧段叫做一个扇区,扇区是磁盘的最小读写单位。一个扇区大小一般是512字节,也存在4096字节的。
  • 柱面:相同编号的磁道形成一个柱面,柱面数与磁道数相等。
  • 磁盘块:window叫做簇,Linux叫做块;相邻的2n个扇区组合在一起,形成一个磁盘块;操作系统的磁盘管理,以磁盘块作为最小读写单位。一般一个磁盘块是4096字节。

1.2 读取磁盘数据过程(IO)

  1. 操作系统将**逻辑块地址(LBA)**传送给磁盘驱动器并启动读取命令;
  2. 磁盘驱动器根据逻辑块地址LBA将磁头移动到正确的磁道,盘片开始旋转,将目标扇区转到磁头下;
  3. 磁盘控制器将扇区数据等信息传送到一个处于磁盘界面的缓冲区;
  4. 磁盘驱动器向操作系统发出“数据就绪”信号;
  5. 操作系统从磁盘界面的缓冲区读取数据。

1.3 完成IO的时间

由三部分组成:

  1. 寻道时间:将读写磁头移动至正确的磁道上所需要的时间(代价最高);
  2. 旋转延迟时间:盘片旋转将目标扇区移动到读写磁头下方所需要的时间,取决于磁盘转速;
  3. 数据传输时间:完成传输数据的所需要的时间,取决于接口的数据传输率。

可以看出大部分因素都是与硬件有关,但移动磁道数是可以通过存储系统来控制。

2. B+ 树

是B树的变种,常用于数据库和操作系统的文件系统中;
MySQL中InnoBD索引就是基于B+ 树实现的。

特点:

  1. 分为内部非叶子节点和叶子节点;
  2. 内部节点只存储key,不存储具体数据;
  3. 叶子节点存储key和具体数据;
  4. 所有的叶子节点会形成一条有序链表。

2.1 MySQL使用B+ 树原因

为了减少IO操作数量,把一个节点的大小设计成最小读写单位的大小;InnoBD的最小读写单位是16k。

B+ 树优势

  1. 每个节点存储的key数量多,树的高度低;
  2. 所有的具体数据都存在叶子节点上,每次查询都要到叶子节点,查询速度稳定;
  3. 所有的叶子节点构成了一个有序链表,区查询方便。

3. B* 树

是B+ 树的变种,给内部节点增加了指向兄弟节点的指针。

在这里插入图在这里插入图片描述
片描述