mysql中行的格式类型包括:Compact、redundant、dynamic、compressed这四种,而我在实际工作中最常用到的是compact类型。
具体行的类型可以在create中看到,例如:
compact行类型又是由:记录的额外信息和记录的真实数据组成。
上图中的前五项:
变长字段长度列表、NULL标志位、记录头信息组成了记录的额外信息
列1数据、列2数据组成了记录的真实数据
1.变长字段长度列表:存储的是行中的变长类型在真实数据中的长度其中变长类型包括:varchar、text、blob,变长类型的真实长度在变长字段长度列表中的存储是逆序存储的如果实际存储长度小于255则用一个字节表示,如果大于255则用两个字节表示
2.NULL标志位:NULL标志位可以看作是NULL值列表,在表中的某些列中是可能存储NULL值的,如果把这些NULL值放到记录的真实数据中存储是很占用空间的,所以Mysql中Compact行格式会把这些列值为NULL的列统一进行管理并存储到NULL值列表中和变长字段长度列表一样它也是逆序存储的NULL值列表的存储不占用真实存储空间只占用NULL值列表,如果当前列为NULL值则用二进位1表示,当前列不为NULL值则用二进制位0表示,如果当前行中所有列都为NOT NULL则不会分配NULL列表的存储空间,在实际开发中创建表时都会设置为NOT NULL因为这样可以节省空间、提高整体的效率
注意:在行信息中有些信息是隐藏的,Mysq会为每行记录都添加transaction_id和roll_pointer列,但row_id只会在表中没有定义主键的时候才会记录添加,相当于Mysql帮我们添加了一个主键
原文:https://www.cnblogs.com/hxjz/p/12548856.html