MySQL——页结构,行结构
数据页
操作系统数据传输单元为4kb大小的数据块,一个页包含4个数据块
页头(38字节)
“索引即数据”,数据页也叫索引页
——页号(4字节)
LSN——日志序列号
页尾(8字节)
页尾校验和 和 页头校验和相对应。当一个页中的数据块由于断电在传输过程中传输失败,就需要用页头和页尾的“校验和”通过一些验证算法进行验证(默认使用CRC32验证)
数据行
数据页大部分为数据行,与数据库“表”里的真实数据行一一对应(行式数据库)
数据行默认为(DYNAMIC),一般存储额外信息,一般存储真实数据
额外信息包含“变长字段长度列表”“Null值列表”两个大小不确定的区域和占固定5字节(40Bit)的头信息
数据行”通过“下一行的地址偏移量”即next_record,将“页”内所有“数据行”组成了一个单向链表,这个偏移量指向的是下一个“行”中“真实数据”的起始地址。好处是:向右是真实的数据值,向左是头,无需额外的长度计算
为了方便查找,将行按主键大小分组,每组8个行,将每个组最后一个行在页中的地址放在记录在页目录中,每个地址对应一个槽,进行二分查找。每次新增数据,达到8个就分裂出来一个新的分组。为了判定是否达到8个,在每组最后一个行用n_owned记录行数
还有个数据页头: