前文: 关于MYSQL INNODB index page header学习和实验总结 http://blog.itpub.net/7728585/viewspace-2063921/ 关于INNODB SYSTEM RECORD infimum和supremum的学习和实验研究 http://blog.itpub.net/7728585/viewspace-2065464/
variable field lengths (1-2 bytes* var ) nullable field bitmap (1 bit * null field) info flags (4 bits) number of records owned (4 bits) order (13 bits) record type (3 bits) next record offset (2 bytes) offset ----cluster key fields (N bytes) transaction id (6 bytes) roll pointer (7 bytes) non-key fields (M bytes)
1、variable field lengths 每个可变长度的变量类型存储一个长度如varchar,对于固定长度的比如INT不记录。 如果不存在可变长度的变量类型,至少占用一个字节为00。 2、nullable field bitmap 每个NULL值占用一个一位(bit),如果不满一个字节按一个字节算,如果不存在NULL值 至少占用一个字节为00。 3、info flags 这4位(4bits)标示是一个行标识,其中binary 0001表示非叶节点最小的行 其中binary 0010表示是删除的行,而infimum和supremum行在我测试数据库中为binary 0000 4、number of records owned 这4位(4bits)表示在本page directory(槽)中的记录数,关于槽的概念后面详细探讨 5、order 这13位(13bits)表示记录插入到块中顺序,INFIMUM恒等于0而SPREMUM恒等于1,而数据行的ORDER从2开始,这里的order 我实验得出的结论为实际物理空间的顺序 6、record type 这3位(3bits)表示记录的类型,supermum恒等于3及binary 011,infimum恒等于2及binary010,节点指针为1及001,数据行为000 7、next record offset 这2个字节是按照CLUSTER KEY值排序的,也就是说他的顺序和order没有任何联系,order是插入的顺序 在INFIMUM中表示的是第一个行的偏移量这个偏移量是当前记录的位置+offset,这个offset直接指向了数据而相关的行头在offset-n开始n为行头的开销。 当然supermum为的偏移量就是NULL空指针了。 8、cluster key fields 这N个字节代表主键字节数,没有就是ROWID占用6字节 9、transaction id 这6个字节为最后一次修改本行的事物ID 10、roll pointer 这7个字节是用于支持MVCC多版本的回退指针, 1bit 标识 7bit 回退段ID 4bytes 回滚段页号 2bytes 回滚段页的偏移量 这几位在讨论MVCC的时候详细研究 11、non-key fields 也就是M个字节的非主键字段的数据了。