InnoDB数据页结构简单总结

一、数据页组成部分:

InnoDB数据页结构简单总结_第1张图片

二、数据页各个组成部分介绍:

1、File Header(38字节):

主要用于存储数据页的一些通用信息:
InnoDB数据页结构简单总结_第2张图片

2、Page Header(56字节):

主要存储页对应的状态信息:
InnoDB数据页结构简单总结_第3张图片

3、Infimum + Supremum(26字节):

InnoDB在每个数据页上都会自动生成一个最小记录和最大记录,通常称为伪记录或虚拟记录,该位置就是用来存放最小和最大的两条伪记录的,其余我们自己插入的记录保存在User Records中。

4、User Records(动态分配):

主要用于保存我们插入的记录。默认情况下是不存在的,当我们第一次以及以后每次插入记录时,InnoDB会从Free Space中为我们分配合适的大小来充当User Records用来保存我们插入的记录。

5、Free Space(动态分配):

主要用于为User Records分配空间。当Free Space空间全部分配给User Records时,就说明当前页已经满了,没有多余空间了。

6、Page Directory(不确定):

由于数据页中的记录都是按照主键递增的方式记录所形成的有序链表,为了提升记录在数据页中的查找速度,InnoDB引擎会把页中所有的记录分组记录。

分组的规则:
1、对于最小记录所在的分组只能有 1 条记录。
2、最大记录所在的分组拥有的记录条数只能在 1~8 条之间。
3、剩下的分组中记录的条数范围只能在是 4~8 条之间。
4、每个组内的最后一条记录会在自己的记录头信息中的n_owned属性中记录该组内共有几条记录

分组后每个组内最后一条记录(组内最大主键记录)的地址偏移量会被保存起来,保存的位置就是Page Directory。这些偏移量在Page Directory被称为槽(slot)。

查找数据的方法:
1、根据二分查找找到记录所在的槽。
2、根据槽内记录的对象头信息中的next_record查找当前主键在组内的位置。
提示: 由于每个槽内存储的都是组内记录的最大主键,所以只要根据前一个槽内的主键值加一就可以找到当前槽内最小的记录,再根据当前最小记录的next_record就可以遍历组内所有信息来查找需要查找的记录。

7、File Trailer(8个字节):

八个字节主要分为两个四个字节方式使用:

  • 第一个四个字节:存储校验和。由于File Header是数据页的最开始部分,所以在数据页有所改动时,会先修改File Header的校验和。当数据完全写入磁盘后File Trailer中的数据校验和也会被更新,这就可以保证在数据页中的记录在更新时候通过比对两个校验和是否相同来确定记录是否已经被完全写入了磁盘。
  • 第二个四个字节:代表页面被最后修改时对应的日志序列位置。也是用来确定数据完整性的。

你可能感兴趣的:(数据库,MySQL)