InnoDB页结构简述

InnoDB数据页结构

数据页结构概览

名称 占用字节
File Header(文件头部) 38字节
Page Header(页面头部) 56字节
Infimum+Supremum(页面中的最小记录和最大记录) 26字节
User Records(用户记录) 不确定
Free Space(空闲空间) 不确定
Page Directory(页目录) 不确定
File Trailer(文件尾部) 8字节

记录在页中的存储

User Records部分负责按照指定的行格式存储记录。 每插入一条新记录,都需要从Free Space里申请新的空间。 如果Free Space的全部空间都用完了, 那么这个页也用完,需要申请下一个页了。记录紧密地存储在一起,形成堆(heap)。记录头信息中会保存每条记录在堆中的相对位置,称为heap_no。值得注意的是,在每个页中会额外存储两个记录,一条代表页面中的最小记录(Infimum记录),一条代表页面中的最大记录(Supremum记录)。这两条记录拥有最小的heap_no,相对位置也最靠前。
页中的记录是按照主键的大小比较大小的。头信息中的next_record会保存当前记录的真实数据到下一条记录的真实数据的距离。自然,从这里可以看出,记录实际上是以链表的形式存储的。链表是按照主键大小串联起来的。链表开头就是Infimum记录,结尾是Supremum记录。如果某条记录被删除,该条记录的deleted_flag会被标记为1,next_record也会变成0,上条记录的 next_record也会产生相应变化。但是该条记录并不会被物理删除以防下次再次使用。 n_owned也会产生相应变化,这里暂且不谈。如果删除的记录很多,会利用原始的next_record信息产生一个垃圾链表。

Page Directory(页目录)

为了方便进行大量数据的查找,InnoDB会采用页目录方便查找。其步骤可以归纳为:
1、将包括Infimum记录和Supremum记录在内的所有记录划分为几个组
2、每个组内最后一个(也就是最大的)记录的头信息中的n_owned属性会记录该组总共有多少记录。
3、将每个组最后一条记录的地址偏移量(即该记录的真实数据与页面中第0个字节之间的距离)单独提取出来,按顺序存储到Page Directory(页目录)。页目录中的这些偏移量称为槽(Slot),每个槽占用2个字节。

本文作者:WYFC4

本文链接:https://www.cnblogs.com/wyfc4/p/17519821.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   WYFC4  阅读(11)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.