MySQL---数据行 行溢出

引自:小林Coding--图解MySQL:

https://xiaolincoding.com/mysql/base/row_format.html

存储结构:数据行(row)----页(page  16KB)----区(extent   1MB)---段(索引段  数据段  回滚段)

变长字段(逆序存储 十六进制):记录数据长度

NULL字段(字节倍逆序存储 ):为空 置为1  非空为0  (例:三个数据(第二个非空)为空   00000101)

记录头信息(多条)示例:

delete_mask位(删除数据并不直接删除,将此位置为1) 

next_record位 (下一条记录位置)

record_type位(0表示普通记录,1表示B+树非叶子节点记录,2表示最小记录,3表示最大记录) 

真实数据:

row_id(隐藏字段  6字节):有主键或唯一约束,则无row_id,否则InnoDB默认创建,非必须

trx_id(6字节):必须,事务

roll_ptr(7字节):必须,上一版本指针

varchar(n):除了类似  TEXT  BLOBs的大对象类型之外,其他所有的列(不包括隐藏列和记录头信息,有变长字段长度列表和NULL值列表)占用长度不能超过 65535字节

单字段:字段允许为NULL(所有字段定义为  NOT),NULL值列表可以用1字节表示,变长字段列表(1.长字段最大字节数小于等于255字节,用1字节表示,大于255字节,为2字节)
    因此单字段  varchar的n 最大为  65535 - 2 - 1 = 65532

多字段: 所有字段长 + 变长列表 + NULL列表  <= 65535

行溢出:

  一个varchar(n)最多存储65532字节,单页16KB,为16384字节,单页存不了一条记录,发生   行溢出,多的数据会存储到另外的  溢出页  中

真实数据存储部分数据,其他溢出页地址:20字节

 

Compressed 和 Dynamic 采用完全溢出,真实数据不存储该列的部分数据,只存储 20字节的  溢出页地址

posted on   廿陆  阅读(87)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示