故事背景
最近在学mysql,看的是《Mysql技术内幕: InnoDB存储引擎》,在读到行记录格式时,发现一个让自己无法理解的事情。于是就揪出了innodb的源码仔细研究一番,最后发现书中的语言确实会将人带入一种认识的误区,也可能是个人理解能力有问题,不说这个了,我们直接说问题。
测试用例
|
|
物理文件中的内容如下:
|
|
按照书中所说,我们按照协议格式解析第一条及第二条记录如下:
|
|
源码解析
但是,问题来了,0xc078+0x002b=0xc0a3,与实际的开始地址0xc0a4不符,怎么回事呢?通过看代码,原来每行记录的开始地址是从第一列数据开始,通过下面的代码依次获得后面的记录。
|
|
通过上面的分析,原来第一条记录的开始地址是0xc081,第二条记录的开始地址是0xc0ac。
innodb通过一个单链表将页内的所有记录串联起来,如上图所示。