InnoDB记录存储结构
InnoDB⾏格式
COMPACT
当编码格式为定长场景下
可变长字段列表:比较常用的varchar或者text等类型,char,int类型为定长字段
NULL值列表:NOT NULL或者主键的情况下,是不会在NULL值列表产生数据的,每个可能为NULL的字段,都会单独对应一个二进制位,当然规定的情况下,必须为整数位,<8的情况下用一个字节,不足位补0
当编码格式为不定长的情况下
可变长字段列表:所有的字段都有可能会把占用字节数据,放到可变长字段列中
可变长字段占用的字节数:假设该编码为gbk占用的最大子节数2,字符长度限制100。那么其预计的最大占用字节数为200,200<256的情况下,用1字节就能表示其占用的字节数。当然在预计占用字节数>256的情况下,如果实际占用数<128的情况下,依旧用1字节表示其占用数。
可变长字段列表的特性:在一列中分两部分占用字节,一部分为占用字节数放在头尾,另一部分为实际数据存在数据列中。另外和NULL值列表有同样的特征,各变长字段数据占⽤的字节数按照列的顺序逆序存放。
记录头信息:由5个字节组成,40个二进制位,主要讲几个参数来了解记录头内存储的内容
delete_mask1来记录该列是否被删除
record_type 3 表⽰当前记录的类型,0表⽰普通记录,1表⽰B+树⾮叶⼦节点记录,2表⽰最⼩记录,3表⽰最⼤记录
next_record 16 表⽰下⼀条记录的相对位置
隐藏列:主要包括三列rowId,transationId,rollbackPoint
row_id : 当数据库没有指定唯一主键的情况下,数据库默认会在表中加入默认主键,当然我们也可以指定不需要这一列
transation_id:事务id
rollbackPoint:回滚端点
Redundant