-
对于定长字段,不需要存长度信息直接存储数据即可,如果不足设定的长度则补充。例如 char 类型,补充 0x20, 对应的就是空格。
-
varchar 存储:因为数据开头有可变长度字段长度列表,所以 varchar 只需要保存实际的数据即可,不需要填充额外的数据。但是我们还没有考虑存储特别长数据的情况
-
Redundant 格式结构与 Compact 格式的区别:
-
所有字段长度列表:不同于 Compact 行格式,Redundant 的开头是所有字段长度列表:记录所有字段的长度偏移,包括隐藏列。偏移就是,第一个字段长度为 a,第二个字段长度为 b,那么列表中第一个字段就是 a,第二个字段就是 a + b。所有字段倒序排列
-
记录头信息:固定 6 字节
-
无用位:2 bits,目前没用
-
deleted_flag:1 bits,标识记录是否被删除
-
min_rec_flag:1 bits,是否是 B+ 树中非叶子节点最小记录标记
-
n_owned:4 bits,记录对应的 slot 中拥有的记录数量
-
heap_no:13 bits,该记录在堆中的序号,也可以理解为在堆中的位置信息
-
n_field:10 bits,该记录的列数量,范围从1到1023
-
1byte_offs_flag:1 bit,1 代表每个字段长度的存储为 1 字节,0 代表 2 字节
-
next_record 指针:16 bits,页中下一条记录的相对位置
-
数据列:
-
CHAR 类型存储:无论字段是否为 NULL,或者长度是多少,char(M) 都会占用 M * 字节编码最大长度那么多字节。为 NULL 的话,填充的是 0x00,不为 NULL,长度不够的情况下,末尾补充 0x2
MySQL原理 - InnoDB引擎 - 行记录存储 - Off-page 列,深入讲解Java
最新推荐文章于 2022-08-20 22:29:09 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)