文章目录
一、InnoDB记录存储结构
我们平时是以记录为单位向表中插入数据的,这些记录在磁盘上的存放形式也被称为行格式或记录格式。目前共有4种不同类型的行格式,分别是COMPACT、REDUNDANT、DYNAMIC和COMPRESSED。这些行格式的原理大体上是相同的。
我们可以在创建或修改表的语句中指定行格式:
CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称
1.1 COMPACT行格式
行格式分为两大部分:
1. 记录的额外信息:
这部分信息是服务器为了更好地管理记录而添加的信息。又分为三个部分:
(1)变长字段长度列表
MySQL支持一些变长的数据类型,如VARCHAR(M), VARBINARY(M), 各种TEXT类型, 各种BLOB类型。这些列也被称为变长字段。变长字段中存储的字节数是不固定的,所以我们在存储真实数据的时候需要把这些数据占用的字节数也存起来。
注:变长字段长度列表不存储值为NULL的列的内容长度
(2)NULL值列表
一条记录中某些列可能存储NULL值,如果把这些NULL值都放到记录的真实数据的地方会很占地方,所以可将一条记录中为NULL的列统一管理起来,存储到NULL值列表中。
将允许存放NULL值的列分配一个二进制位,值为1表示值为NULL,为0时表示不为NULL。
(3)记录头格式
记录头信息由固定的5字节组成,用于描述记录的一些属性。
注:各部分中列的信息按照列的顺序逆序存放
2. 记录的真实数据:
记录的真实数据除了我们自定义的列的数据外,MySQL会