MySQL 行格式(Row Format)

阅读: 评论:0

MySQL 行格式(Row Format)

MySQL 行格式(Row Format)

行格式简介

表的行格式决定了其行的物理存储方式,进而会影响查询和DML操作的性能。

InnoDB存储引擎支持四种行格式:REDUNDANT、 COMPACT、DYNAMICCOMPRESSED。

MySQL版本5.7默认使用DYNAMIC行格式。

InnoDB行格式概述
行格式紧凑的存储
特性
增强的可变长度色谱柱存储大索引键前缀支持压缩支持支持的表空间类型所需文件格式
REDUNDANTNoNoNoNosystem, file-per-table, generalAntelope or Barracuda
COMPACTYesNoNoNosystem, file-per-table, generalAntelope or Barracuda
DYNAMICYesYesYesNosystem, file-per-table, generalBarracuda
COMPRESSEDYesYesYesYesfile-per-table, generalBarracuda

DYNAMIC行格式介绍

DYNAMIC行格式由变长字段列表  +  NULL值列表  + 记录头信息  + 列值组成。

1.变长字段长度列表

比如VARCHAR(M)类型的列称为变长字段,其真实数据存在列值,而占用的字节长度(十六进制表示)逆序存在变长字段长度列表。

2.NULL值列表

将每个允许存储NULL的列对应一个二进制位,二进制位按照列的顺序逆序排列,如果列值NULL则记录1到NULL值列表。不为NULL则记录0。

3.记录头信息

它是由固定的5个字节组成。5个字节也就是40个二进制位。

记录头信息
名称大小(B)描述
预留位2未使用
delete_mask1标记该记录是否被删除
min_rec_mask1B+树的每层非叶子节点中的最小记录都会添加该标记
n_owned4表示当前记录拥有的记录数
heap_no13表示当前记录在记录堆的位置信息
record_type3表示当前记录的类型。
0:普通记录,1:B+树非叶子节点记录,2:最小记录,3:最大记录
next_record16表示下一条记录的相对位置

 4.列值

列值分为隐藏列和真实数据列。

隐藏列为ROW_ID(行ID)、TRX_ID(事务ID)、ROLL_PTR(回滚指针)。

真实数据列为用户表中的值。

 

其他行格式和DYNAMIC差不多,只是对行溢出处理方式不同,DYNAMIC行溢出是把所有的字节都存储到其他页面中,只在记录的真实数据处存储其他页面的地址,COMPACT是记录的真实数据处存储字符串的前768个字节,COMPRESSED会采用压缩算法对页面进行压缩,以节省空间。

 

那么对于一个表

学生成绩表
idnamescore
1穗乃果12
260
3海未 

真实存储形式是这样的

学生成绩表
变长字段列表NULL值列表记录头信息行ID事务ID回滚指针idnamescore
2 30忽略 1021穗乃果12
2 10忽略 3256260
22忽略 33803海未 

实际值都是十六进制表示,这里只是为了方便阅读。行ID(row_id)当表中没有唯一主键索引和非空的唯一索引才会存在。

本文发布于:2024-02-05 04:58:30,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170724665763244.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:格式   MySQL   Format   Row
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23