您好,欢迎访问一九零五行业门户网

[MySQL]InnoDB行格式剖析_MySQL

bitscn.com
[mysql]innodb行格式剖析
innodb和大多数行式数据库一样,记录以行的格式存储,它提供了两种格式:compact和redundant
compact
compact格式是在mysql5.0时才被引入,它是新的行格式,其设计目标是高效存放数据,示意图如下:
1)变长字段长度列表。按列的逆序放置,当列长度小于255字节,用1字节表示,若大于255字节,用2个字节表示,至多为2字节(这也很好解释了innodb中varchar的最大长度为什么是65535,因为2个字节为16位,2的16次方-1)。注意,对于固定长度字段(如char),是不需要记录其长度的。
2)null标志位。指示该行中的列是否为null,1表示null。
3)记录头信息。固定占用5个字节(40位),每位代表的含义如下表所示:
4)最后就是实际存储的该行每列的数据了,注意:null不在该部分中占用存储。
5)此外还有两个隐藏部分,分别存放事务id和回滚指针,大小分别为6字节和7字节,如果表没有定义主键,每行还会自动增加6字节的rowid。
redundant
redundant是mysql5.0之前innodb的行记录存储格式,其示意图如下:
1)字段长度偏移列表。同样按列的逆序放置,当列长度小于255字节,用1字节表示,若大于255字节,用2个字节表示。
2)记录头信息。固定占用6个字节(48位),每位含义见下表:
3)最后部分是实际存储各个列数据。
4)和compact一样,还有两个隐藏部分,分别存放事务id和回滚指针,大小分别为6字节和7字节,如果表没有定义主键,每行还会自动增加6字节的rowid。
redundant和compact最大的不同是对char类型null值的处理,redundant会实际存储null值,占char类型固定长度空间,而compact不占用空间,这也是compact能寸更多记录的原因之一。注意:对于varchar类型,不管是compact还是redundant都不存储null值。
compressed和dynamic
innodb plugin引入了新的文件格式,称为barracuda(之前的compact和redundant称为antelope),拥有两种权限的记录格式compressed和dynamic。这里就不详细介绍它们了,有兴趣的童鞋可以自行研究下。
bitscn.com
其它类似信息

推荐信息