mysql innodb 行格式_Mysql-InnoDB行记录格式

InnoDB行记录格式

InnoDB存储引擎是面向列的,就是说数据是按照行进行存放的. 每个页存放的行记录也是有硬性定义的,最多允许存放16KB/2-200行的记录.这里主要介绍两种行记录格式.Compact和Redundant格式.

Compact行记录格式

40b90eba8e4326d2f2923fc77c8ae12c.png

首先首部是一个非NULL变长字段长度列表,并且是按照列的顺序逆序放置的,其长度为:

若列的长度小于255字节,用1字节表示

若大于255字节,用2字节表示

变长字段的长度最大不可以超过2字节,因为在MySQL数据库中varchar类型的最大长度限制为65535.

也就是列表中的最后一个数据就是表中第一个变长字段的数据列的数据的长度.

变长字段之后的第二个部分就是NULL标志位,该位只是了该行数据中是否有NULL值,有则用1表示,该部分所占的字节为1字节.记下来是记录头信息,占用5字节.主要含义为:

c2a84d1c01324cb956b65813456c976a.png

这里的n_owned是该记录拥有的记录数,因为在InnoDB中,页中的行数据是存储在一个个槽中的,每个槽中可能有多条数据,这个值就是记录所在的槽中有几条记录的.

最后就是实际的每个列的数据. 这里需要注意的是,NULL不占该部分任何空间.就是NULL除了有NULL标志位外,没有任何的存储空间.

每行数据除了用户定义的列之外,还有两个隐藏列,事务ID列和回滚指针列.如果没有制定主键,还会增加一个6字节的worid列.

Redundant行记录格式

3aaba6b61779ca5df7045495fabb562f.png

首部不同与Compact,这里存储的是字段长度偏移列表.同样按照列的顺序逆序放置.是判断每一列的起始位置的偏移量来找见每个列的.

记录头信息:

5ae5853aaf663734aaa183671f1b70e1.png

对于Redundant记录格式,记录头占用6字节,其中n_fields值代表一行中列的数量.占10位,也就是最多有1023个列.

对于NULL值的处理与Compact不一样,在REdundant中只有varchar的NULL值不占空间,而其他确定长度的字段类型还是要占用空间.而Compact中都不占用空间.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值