MySQL数据页的内部结构

MySQL数据页的内部结构

mysql的数据页由7部分组成

  1. File Header

    文件头,38字节,用于描述页的信息

    描述页的通用信息(页的编号,上一页是谁,下一页是谁)

    包含页的校验和(checksum) 页号 上一页 下一页 页的类型 页属于哪个表空间

    常见的页的类型:Undo页,索引页(在innodb中,即数据页),系统页

  2. Page Header

    页面头部,记录本页已经存储了多少条记录,第一条记录的地址是什么,本页一共有多少个槽等,专门存储各种状态信息

    Page_index_id 当前页属于哪个索引

    page_Heap_Top 还未使用的空间最小地址,从该地址往后都是free Space

    Page_N_Heap 本页记录数量,包括最小最大记录,被标记为已删除的记录

    Page_free 第一个被标记为已删除的记录地址,(各个被删除的记录通过next_record 会组成一个单链表,里面的记录也可以被重复利用)

    page_garbage 被标记为删除的记录占用的字节数

    page_last_insert 最后插入记录的位置

    page_n_recs (该页中记录的数量,不包括最小最大记录,被标记为已删除的记录)

    page_max_trx_id 修改该页最大的事务id,仅在二级索引中定义

    page_level 当前页在B+树中所处的层级

    页头,58字节,描述页的状态信息

  3. Infimum SupreMum

    最大最小记录,26字节,这是两个虚拟的行记录

  4. User Recoders

    用户记录除了会记录我们自定义的字段的那些值

    还会默认且必须的添加两个记录 事务id(trx_id) 和 回滚id(rollpoint_id)

    用户记录,大小不确定,存储行记录的信息

  5. Free space

    空闲记录,大小不确定,页中还没有使用的记录

  6. Page Directory

    页目录,大小不确定,存储用户记录的相对位置

    我们使用二分法查找页目录中记录

    将所有的记录分成几组,包括最小记录和最大记录,但不包括被标记为已删除的记录。

    第一组只有一个记录,也就是最小记录,其余的每组中包含4~8个记录,最后一页包含1 到8条记录,这样做的好处是,除第一组的记录外,每组的记录都会平分。

    每组最后一条记录的头信息会存储该组一共有多少条记录,n_owned字段

    页目录用来存储每组最后一条记录的地址偏移量,会按照先后顺序存储起来–每组的地址偏移量也被称之为槽,每个槽相当于指针指向了每个组最后一条记录

  7. File Trialer

    文件尾,8字节,用于校验页是否完整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C_x_330

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值