加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL的InnoDB行格式剖析 - MySQL教程

发布时间:2014-01-06 15:24:59 所属栏目:MySql教程 来源:站长网
导读:InnoDB和大多数行式数据库一样,记录以行的格式存储,它提供了两种格式:Compact和 Redundant Compact Compact格式是在MySQL5.0时才被引入,它是新的行格式,其
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。这里就不详细介绍它们了,有兴趣的童鞋可以自行研究下。

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读