@@ -182,6 +182,34 @@ SET default_storage_engine=NDBCLUSTER;
182182
183183
184184
185+ #### 数据页结构
186+
187+ 页是 InnoDB 存储引擎管理数据的最小磁盘单位,一个页的大小一般是` 16KB ` 。
188+
189+ ` InnoDB ` 为了不同的目的而设计了许多种不同类型的` 页 ` ,比如存放表空间头部信息的页,存放` Insert Buffer ` 信息的页,存放` INODE ` 信息的页,存放` undo ` 日志信息的页等等等等。
190+
191+ B-Tree 节点就是实际存放表中数据的页面,我们在这里将要介绍页是如何组织和存储记录的;首先,一个 InnoDB 页有以下七个部分:
192+
193+ ![ ] ( https://img.starfish.ink/mysql/innodb-b-tree-node.jpg )
194+
195+ 有的部分占用的字节数是确定的,有的部分占用的字节数是不确定的。
196+
197+ | 名称 | 中文名 | 占用空间大小 | 简单描述 |
198+ | -------------------- | ------------------ | ------------ | ------------------------ |
199+ | ` File Header ` | 文件头部 | ` 38 ` 字节 | 页的一些通用信息 |
200+ | ` Page Header ` | 页面头部 | ` 56 ` 字节 | 数据页专有的一些信息 |
201+ | ` Infimum + Supremum ` | 最小记录和最大记录 | ` 26 ` 字节 | 两个虚拟的行记录 |
202+ | ` User Records ` | 用户记录 | 不确定 | 实际存储的行记录内容 |
203+ | ` Free Space ` | 空闲空间 | 不确定 | 页中尚未使用的空间 |
204+ | ` Page Directory ` | 页面目录 | 不确定 | 页中的某些记录的相对位置 |
205+ | ` File Trailer ` | 文件尾部 | ` 8 ` 字节 | 校验页是否完整 |
206+
207+
208+
209+ 在页的 7 个组成部分中,我们自己存储的记录会按照我们指定的` 行格式 ` 存储到 ` User Records ` 部分。但是在一开始生成页的时候,其实并没有 ` User Records ` 这个部分,每当我们插入一条记录,都会从 ` Free Space ` 部分,也就是尚未使用的存储空间中申请一个记录大小的空间划分到 ` User Records ` 部分,当 ` Free Space ` 部分的空间全部被 ` User Records ` 部分替代掉之后,也就意味着这个页使用完了,如果还有新的记录插入的话,就需要去申请新的页了,这个过程的图示如下:
210+
211+ ![ img] ( https://relph1119.github.io/mysql-learning-notes/images/05-02.png )
212+
185213#### 如何存储表
186214
187215MySQL 使用 InnoDB 存储表时,会将表的定义和数据索引等信息分开存储,其中前者存储在 ` .frm ` 文件中,后者存储在 ` .ibd ` 文件中。
@@ -243,28 +271,6 @@ ALTER TABLE 表名 ROW_FORMAT=行格式名称
243271
244272
245273
246- #### 数据页结构
247-
248- 页是 InnoDB 存储引擎管理数据的最小磁盘单位,一个页的大小一般是` 16KB ` 。
249-
250- ` InnoDB ` 为了不同的目的而设计了许多种不同类型的` 页 ` ,比如存放表空间头部信息的页,存放` Insert Buffer ` 信息的页,存放` INODE ` 信息的页,存放` undo ` 日志信息的页等等等等。
251-
252- B-Tree 节点就是实际存放表中数据的页面,我们在这里将要介绍页是如何组织和存储记录的;首先,一个 InnoDB 页有以下七个部分:
253-
254- ![ ] ( https://img.starfish.ink/mysql/innodb-b-tree-node.jpg )
255-
256- 有的部分占用的字节数是确定的,有的部分占用的字节数是不确定的。
257-
258- | 名称 | 中文名 | 占用空间大小 | 简单描述 |
259- | -------------------- | ------------------ | ------------ | ------------------------ |
260- | ` File Header ` | 文件头部 | ` 38 ` 字节 | 页的一些通用信息 |
261- | ` Page Header ` | 页面头部 | ` 56 ` 字节 | 数据页专有的一些信息 |
262- | ` Infimum + Supremum ` | 最小记录和最大记录 | ` 26 ` 字节 | 两个虚拟的行记录 |
263- | ` User Records ` | 用户记录 | 不确定 | 实际存储的行记录内容 |
264- | ` Free Space ` | 空闲空间 | 不确定 | 页中尚未使用的空间 |
265- | ` Page Directory ` | 页面目录 | 不确定 | 页中的某些记录的相对位置 |
266- | ` File Trailer ` | 文件尾部 | ` 8 ` 字节 | 校验页是否完整 |
267-
268274
269275
270276> [ 踏雪无痕-InnoDB存储引擎] ( https://www.cnblogs.com/chenpingzhao/p/9177324.html )
0 commit comments