mysql行格式解析

340 阅读2分钟

概述

mysql行格式虽然在我们写代码的时候不太会关注这个东西,但是了解了还是对我们有一定帮助的,这样我们可以对mysql是怎么存储数据有一定了解,我们可以更好的对mysql进行一些优化和存储的空间的节省.了解行格式,其实就是了解我们插入数据库的每条记录是怎么存储的.

行记录分析

1.行格式分类

COMPACT,Redundant,Dynamic,Compressed,由于现在默认使用的是Dynamic,我们了解这种就行了,其它 的行格式大同小异

2.Dynamic行结构分析

1.表例子

image.png

image.png

2.dynamic结构图

image.png

3.解释说明

1.变长字段长度列表记录的是当前行可变长度列的长度(逆序排放),使用1-2 byte表示,也就是说存储最大字节
  数量65535根据实际字节存储长度来确定,注意不是65535字符,比如gbk,一个字符两个字节,只能存储65535/2
  
2.可为空列是否为空记录列表(逆排放),使用一个字节为单位记录,不满一个字节高位补0

3.记录头信息先不详细解释,后续 索引,b+,页相关信息再详细解释

4.真实数据部分除了我们自己定义的列,还有row_id(没定义主键情况,自动生成),trans_id,roll_pointer,这些也是和后续事务,b+,索引有关联,后续详细讲解

5.行记录是存在页中的,mysql一页有16k(16*1024字节),如果单条记录某列数据比较大,会导致行溢出,直接数据
  保存到一个新页上,当前行只保存溢出行的页地址

总结

可以看到,行的数据结构还是非常复杂的,行结构定义非常重要,关系到后续索引,数据库操作,页等等