MySQL系列——InnoDB行格式

InnoDB行格式

MySQL的每条数据都是以一条记录的形式存放在磁盘上的,它们存放的方式被称为行格式或者记录格式。InnoDB中定义了四种类型的行格式,分别是CompactRedundantDynamicCompressed。在我们创建或修改表的时候就可以指定当前表的行格式:

CREATE TABLE t_user (id int(10) primary key, name varchar(20) ) ROW_FORMAT = Compact;
ALTER TABLE t_user ROW_FORMAT = Compressed;

Compact行格式

在这里插入图片描述

记录的真实数据

一条记录的真实数据除了包含我们自定义的各个列的数据之外,还包含三个MySQL默认会为每条记录添加的隐藏列数据,包括行ID、事务ID和回滚指针。

真正的列数据

非null值的列数据会被存储在此处,而null值数据会被记录在额外信息中的NULL值列表中。

隐藏列
列名是否必须描述
DB_ROW_ID行ID,记录的唯一标识,没有主键和Unique键的记录会被自动创建
DB_TRX_ID事务ID
DB_ROLL_PTR回滚指针

记录的额外信息

描述和表示这条记录所需的除真实数据以外的信息,主要包含变长字段长度列表、NULL值列表和记录头信息等。

变长字段长度列表

对于varchar(M)等变长类型的字段会被分成两部分存储,一部分即真正的数据内容,被存储在记录的真实数据中,还有一部分代表字段占用的字节数,这一部分一般被存储在额外信息的变长字段长度列表中,按列的顺序逆序排列。

NULL值列表

对于所有可以存储NULL的列都在此处对应一个二进制位,其中“1”代表此列的值为null。这些二进制位按列的顺序逆序排列。

记录头信息
名称字节数描述
delete_mask1标记该记录是否被删除
min_rec_mask1B+树的每层非叶子节点中的最小记录标记
n_owned4表示当前记录拥有的记录数
heap_no13表示当前记录在记录堆的位置信息
record_type3表示当前记录的类型 0-普通 1-B+非叶子节点 2-最小记录 3-最大记录
next_record16表示下一条记录的相对位置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值