前言
我们平时是以记录为单位来向表中插入数据的,这些记录在磁盘上的存放方式被称为行格式或者记录格式,今天我们就来介绍一下InnoDB行存储格式。希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
基本操作
一行记录可以以不同的格式存在InnoDB
中,行格式分别是compact
、redundant
、dynamic
和compressed
行格式。可以在创建或修改的语句中指定行格式:
-- 创建数据表时,显示指定行格式
CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称;
-- 创建数据表时,修改行格式
ALTER TABLE 表名 ROW_FORMAT=行格式名称;
-- 查看某数据表的行格式
show table status from 数据库名 like '<数据表名>';
复制代码
Compact行格式
Compact
行格式是MySQL5.0中引入的,其目标是为了更高效的存储数据记录。其存储结构示意图如下:
从图中我们可以看出来,一条完整的记录其实可以被分为记录的额外信息
和记录的真实数据
两部分。
记录的额外信息
这部分信息是为了描述这条记录而不是额外添加的一些信息,这些额外信息分为三部分,分别是变长字段长度列表、NULL值列表和记录头信息;
变长字段的长度列表
MySQL支持一些变长的数据类型,如Varchar,变长字段中存储多少字节的数据是不固定的,所以InnoDB在存储数据的时候,会把这些数据占用的真实字节数也保存下来,也就是变长字段时占用了两部分空间来存储的:
- 真实的数据内容
- 占用的字节数
在Compact行格式中,把所有的变长字段锁占用的字节数按逆序排放在变长字段字节数列表中。
另外,变长字段的长度列表不是一定存在的,如表中没有变长类型的字段,或者该记录中所有的变长字段值均为NULL
。
举例说明: