MySQL-InnoDB磁盘结构

2023-07-12,,

主要阐述InnoDB存储引擎(MySQL5以后的默认引擎)。

数据库中最基本的组成结构是数据表,视觉上的表和其对应的磁盘结构如下:

此图参考了厦门大学课堂:MySQL原理 。但是视频中一些更多细节没有涉及,比如Leaf node segment和Non-leaf node segment其实就是叶子节点和非叶子节点段,

照inode,page相关概念,一颗B+树当然只有这两种段,来管理各种page(树节点)。信息较少,且看且珍惜。

更多关于tablespace的信息移步:MySQL Tablespaces

**核心:MySQL以Page为单位进行数据管理(默认1个Page=16KB)。因为磁盘寻道原因,一次将读取1个Page到内存。即每次查询,一次IO至少是一个Page的数据被装载到内存。

将segment,extent,page的关系描绘如下:

Page的组成:

**page directory:提高records部分的查询速度(单链表-->排序-->二分查找)。定位到page后,records记录太长,设计了page directory的slot插槽,每个slot包含一段records记录,提高查找效率。

为什么一个Page是16KB?太大,page directory定位时间太长;太小,磁盘寻道时间变长,IO次数变多。这是一个折中值。(固态硬盘没有磁盘寻道,可以考虑将Page size的值改为小于16KB的更小的值,仍需要测试验证数据支撑)。

索引页:

MySQL中:每个索引都对应了一颗B+树。

聚集(聚集不一定是主键,但主键一定是聚集)索引对应了一颗B+树,叶子节点存储了数据;

非聚集(辅助)索引对应了一颗B+树,叶子节点只存储了主键,所以需要额外一次去聚集索引B+树查找所需数据(即回表)。

主键索引和辅助索引检索示意:

本文中部分图的来源在这里。

MySQL-InnoDB磁盘结构的相关教程结束。

《MySQL-InnoDB磁盘结构.doc》

下载本文的Word格式文档,以方便收藏与打印。