mysql InnoDB 行记录格式

目录

 

1. 简介及其格式之间关系

1.1 关系结构

1.2 简介

2. Compact行记录格式

2.2 null值列表:

2.3 头信息:

2.3.1序列及其大小

2.3.2 字段说明

3.Redundant行记录格式

3.1 字段长度偏移列表

3.2 记录头信息

3.3.1序列及其大小

3.3.2 字段说明

4.Dynamic行记录格式

4.1 优势

5. Compressed行记录格式


1. 简介及其格式之间关系

1.1 关系结构

1.2 简介

       在早期的InnoDB版本中,由于文件格式只有一种,因此不需要为此文件格式命名。随着InnoDB引擎的发展,开发出了不兼容早期版本的新文件格式,用于支持新的功能。为了在升级和降级情况下帮助管理系统的兼容性,以及运行不同的MySQL版本,InnoDB开始使用命名的文件格式。

       InnoDB 1.0.x版本引入了新的文件格式(新的页格式),在InnoDB行记录格式中说的Compact行记录格式和Redundant行记录格式称为Antelope文件格式。新的文件格式称为Barracuda文件格式。Barracuda文件格式下有Compressed行记录格式和Dynamic行记录格式

 

1. Antelope: 先前未命名的,原始的InnoDB文件格式。MySQL5.6的默认文件格式。可以与早期的版本保持最大的兼容性。不支持 Barracuda 文件格式。

2. Barracuda: 新的文件格式。它支持InnoDB的所有行格式,相关的功能包括:InnoDB表的压缩,长列数据的页外存储和索引建前缀最大长度为3072字节。

 

在 msyql 5.7.9 及以后版本,默认行格式由innodb_default_row_format变量决定,它的默认值是DYNAMIC,也可以在 create table 的时候指定ROW_FORMAT=DYNAMIC。用户可以通过命令 SHOW TABLE STATUS LIKE'table_name' 来查看当前表使用的行格式,其中 row_format 列表示当前所使用的行记录结构类型。

 

2. Compact行记录格式

 

Compact 行格式
变长字段长度列表null值列表记录头部信息隐藏列数据列
RowID(6字节)如果没有定义主键会添加TransactionID(6字节)事务列Roll Point(7字节)回滚指针列列1列2……

2.1 变长字段长度列表:

一些列是变长的,因为字符集可能是变长的,或者列的数据类型比如blob或者varchar这种,对于这样的数据列的值,innodb存储时肯定需要具体的数据长度,这个长度就是存在变长字段长度列表里的;变长字段长度最大不超过2字节(MySQL数据库varcahr类型的最大长度限制为65535)

2.2 null值列表:

可空列如果没有数据,innodb不会在记录里存一个null,而是将其记录在null值列表中,这个列表本质上是通过字节的bit位来代表空列的,每一个bit位对应一个可空的列,用0和1表示是否为空。

2.3 头信息:

2.3.1序列及其大小

 

记录头信息
预留位1预留位2delete_maskmin_rec_maskn_ownedheap_norecord_typenext_record
                                        

 

2.3.2 字段说明

 

名称大小(单位:bit)描述
预留位11预留位1
预留位11预留位1
delete_mask1标记该记录是否被删除
min_rec_mask1B+树的每层非叶子节点中的最小记录都会添加该标记
n_owned4

表示当前记录(组内)拥有的记录数

Infimun分组的值为1

Supremum分组的值为1~8

普通分组4~8

仅槽记录存在该值

的heap_no13表示当前记录在记录堆的位置信息
record_type3表示当前记录的类型,0表示普通记录,1表示B+树非叶子节点记录,2表示最小记录,3表示最大记录
next_record16表示下一条记录的相对位置

 

3.Redundant行记录格式

Redundant
字段长度偏移列表记录头部信息隐藏列数据列
RowID(6字节)如果没有定义主键会添加TransactionID(6字节)事务列Roll Point(7字节)回滚指针列列1列2列3……

3.1 字段长度偏移列表

是按照列的顺序逆序放置的。当列的长度小于255字节,用1字节表示;若大于255个字节,用2个字节表示

3.2 记录头信息

行格式固定占用6个字节(48位)

3.3.1序列及其大小

记录头信息
预留位1预留位2delete_flagmin_rec_flagn_ownedheap_non_fielfs1byte_off_flagnext_record
                                                

 

3.3.2 字段说明

名称大小(单位:bit)描述
预留位11预留位1
预留位11预留位1
delete_flag1标记该记录是否被删除
min_rec_flag1如果为1则该记录是预先被定义为最小的记录
n_owned4

表示当前(组内)记录拥有的记录数

Infimun分组的值为1

Supremum分组的值为1~8

普通分组4~8

仅槽记录存在该值

heap_no13表示当前记录在记录堆的位置信息
n_fields10疾苦中列的数量
1byte_offs_flag1偏移列表为1个字节还是2个字节
next_record16表示下一条记录的相对位置

 

 

 

 

 

4.Dynamic行记录格式

DYNAMIC 与 COMPACT 几乎相同,但每个 BLOB 字段仅使用 20 个字节。(COMPACT 记录中存储前 768 个字节的 BLOB)

4.1 优势

(1)记录中可能有更多的 BLOB 字段。

(2)压缩表

 

5. Compressed行记录格式

更好的压缩表

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值