【mysql体系结构】InnoDB行格式

【mysql体系结构】InnoDB行格式

公众号:DBA运维笔记

InnoDB存储引擎目前有4种类型的行格式

  • Compact
  • Redundant
  • Dynamic
  • Compressed

修改行格式的语法

create table 表名 (列的信息) row_format=行格式名称;
alter table 表名 row_format=行格式名称;

Compact行格式

在这里插入图片描述

变长字段长度列表

变长字段占用的存储空间分为两部分:真正的数据内容、占用的字节数。

在compact行格式中,把所有变长字段的真实数据占用字段长度都存放在记录的开头部位,从而形成了一个变长字段长度列表,各变长字段数据占用的字节数按照列的顺序逆序存放。

null值列表

首先统计表中允许存储null的列由哪些

如果表中没有允许存储null的列,则null值列表页不存在了。否则将每个允许存储null的列对应一个二进制位,二进制位按照列的顺序逆序排序。

  • 二进制位的值为1时,代表该列的值为null
  • 二进制位的值为0时,代表该列的值不为null

mysql规定null值必须用整数个字节的位表示,如果使用的二进制位个数不是整个字节,则在字节的高位补0.

记录头信息
由5个字节组成,5个字节也就是40个二进制位

名称大小(单位:bit)描述
预留位11没有使⽤
预留位21没有使⽤
delete_mask1标记该记录是否被删除
min_rec_mask1B+树的每层⾮叶⼦节点中的最⼩记录都会添加该标记
n_owned4表示当前记录拥有的记录数
heap_no13表示当前记录在记录堆的位置信息
record_type3表示当前记录的类型,0表示普通记录,1表示 B+树⾮叶⼦节点记录,2表示最⼩记录,3表示 最⼤记录
next_record16表示下⼀条记录的相对位置

mysql会为每个记录默认添加一些列(也称为隐藏列)

列名是否必须占用空间描述
DB_ROW_ID6个字节行ID,唯一标识一条记录
DB_TRX_ID6个字节事务ID
DB_ROLL_PTR7个字节回滚指针

InnoDB存储引擎会为每条记录都添加DB_TRX_ID和DB_ROLL_PTR列,但是DB_ROW_ID是可选的(在没有自定义主键以及unique键的情况下才会添加该列)。

对于char(M)列,当列采用的是定长字符集时,该列占用的字节数就不会被加到变长字段长度列表,而如果采用变长字符集时,该列占用的字节数也会被加到变长字段长度列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值