InnoDB行存储的三个组成部分(说明: F字符表示列的数量)
名称(Name)
大小(Size)
Field Start Offsets
(F*1) or (F*2) bytes
Extra Bytes
6 bytes
Field Contents
取决于内容
1: FIELD START OFFSETS
指在实际数据存储行中每一字段(entry,实际存储不只是包括列,还有额外信息)的位置偏移量信息列表,这个位置由原点(Origin)相对位置和下一个字段计算而来。该列表保存的行中每一字段的偏移信息为倒序的,也就是说行中第一字段信息在这个列表的最后。
举个例子:假设有三个列,第一个列的长度为1字节,第二个为2字节,第三个为4字节,这种情况下,保存三个列的偏移信息分别为[1,3(1+2),7(1+2+4)],列表倒序,转储的Field Start Offsets的信息应该为[07,03,01].
有两种的特殊复杂情况:
1:偏移量数字可能为一个或两个字节,一个字节最多允许长度为127,最高位bit用来保存是否为NULL,"Extra Bytes"部分说明了偏移量为一个字节还是两个字节。
2:偏移量可能有一个标志信息,剩下的字节空间包含两个段,指具体的内容。(可能这些内容并不在同一个页中,参考后面的分析)
当偏移量为一个字节时:
1 bit = NULL
7 bit, 实际的偏移信息
当偏移量为两个字节时&