MySQL学习笔记 002:InnoDB数据页结构

MySQL学习笔记 002:InnoDB数据页结构

1 数据页结构

名称 大小 (Byte) 描述
File Header 38 文件头部,存放页通用信息
Page Header 56 页头部,存放数据页专用信息
Infimum + Supremum 26 首、末虚拟记录
User Record - 存放记录
Page Directory - 页目录,存放记录的相对位置
File Trailer 8 文件尾部,数据校验

2 User Record

2.1 heap_no

记录按顺序排列在User Record中,直至将页内空余空间用完。保存记录的结构称为堆,每条记录中记录头的heap_no递增。Infimum为首条记录,heap_no为0。Supremum为末记录,heap_no为1。用户的记录heap_no从2开始。

2.2 next_record

next_record到下一个记录的真实数据距离。

2.3 deleted_flag

被删除的记录删除后deleted_flag置为1,被删除的记录组成垃圾链表,组成可重用空间。

2.4 record_type

  • 0:普通记录
  • 1:B+树目录项
  • 2:Infimum记录
  • 3:Supremum记录

3 Page Directory

记录被分为若干个组,每组最多8条记录。每组最后一条记录的数据的地址偏移量存放在页目录(Page Directory)中。每个组中最后一条记录的n_owned存放组内记录条数。
根据主键查找时,采用二分查找的方式查找记录,减少查找次数。

4 Page Header

名称 大小 (Byte) 描述
page_n_dir_slots 2 页目录中槽的数量
page_heap_top 2 未使用空间的最小地址
page_n_heap 2 堆内记录数量(包括所有记录)
page_free 2 垃圾链表头节点
page_garbage 2 已删除记录占用字节数
page_last_insert 2 最后插入记录地址
page_direction 2 记录插入方向
page_n_direction 2 一个方向连续插入记录数量
page_n_recs 2 页内用户记录数量(不包括已删除记录和首末虚拟记录)
page_max_trx_id 8 修改当前页的最大事务ID
page_level 2 B+树层级
page_index_id 8 索引ID
page_btr_seg_leaf 10 B+树叶子节点段的头部信息
page_btr_seg_top 10 B+树非叶子节点段的头部信息

5 File header & File trailer

5.1 File header

FIL_PAGE_SPACE_OR_CHECKSUM:校验和
FIL_PAGE_OFFSET:页号
FIL_PAGE_PREV:前一页页号(组成双向链表)
FIL_PAGE_NEXT:后一页页号(组成双向链表)

5.2 File trailer

保存校验和和LSN号。

上一篇:PTA习题集-团体程序设计天梯赛L1-002


下一篇:Python机器学习:逻辑回归002逻辑回归的损失函数