Compact格式下MySQL的数据如何存储到磁盘

查找文件存储格式

在MySQL命令行输入

show table status;

得到的Row_format列就是磁盘的存储格式

在InnoDB 1.0.X之前,InnoDB存储引擎提供了Compact和Redundant两种格式来存放行记录数据。

在InnoDB 1.0.X之后,开始又引入了新的文件格式(file format),新引入的文件格式称为Barracuda文件格式。

Barracuda文件格式下拥有两种新的行记录格式:Compressed和Dynamic。

AntelopeBarracuda
Compact、RedundantCompact、Redundant、Compressed和Dynamic

查看Innodb存储引擎的文件格式

show variables like 'innodb_file_format';

Dynamic和Compact格式基本相同,只在行溢出数据的处理上有区别。

变长字段varchar存储数据

假设存储下列两行数据

varchar(8)char(3)char(4)
第一行Innodbab
第二行Mysqlxy

上述数据的格式虽然以行的形式出现,但实际上在磁盘中并没有这种

第一行数据存储形式如下:

0x06null标志位记录头信息Innodbab
第一列表示Innodb占据了6个字符,用十六进制表示为`0x06`
根据变长字段长度列表中描述的变长字段的信息去查找变长字段。
该列只记录变长类型的字符,定长的跳过省略。

第二行数据存储形式如下:

0x05null标志位记录头信息Mysqlxy
第一列表示Mysql占据了5个字符,用十六进制表示为`0x05`

假设存储多个变长类型的数据,如下

varchar(10)varchar(10)varchar(10)char(1)
linuxubuntucentosx
mysqlmongodbredisy
httpnginxapachez

当有多个变长的数据时,只存储变长数据,并且按照列的逆序存放

在这里插入图片描述
不难看出,第一列存放三个变长字符类型的长度(用十六进制表示)。
以第三行为例,http、nginx、apache分别是4、5、6位,在实际存储时逆序存放,就像第一列所展示的,6、5、4。

所以总结一下:

变长字段列表(逆序存放)null标志位记录头信息数据A数据B数据C

null值的存储方式

规定:
若有Null值,bit位置是1
字段值不为null,bit位置是0

通过创建下列一张表来说明:

CREATE TABLE `students` (

  `name` varchar(10) NOT NULL,

  `address` varchar(255) DEFAULT NULL,

  `gender` char(1) DEFAULT NULL,

  `class` varchar(10) DEFAULT NULL,

  `hobbies` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`name`)
) 

其中已经插入了一行数据:

nameaddressgenderclasshobbies
rolesmhobby_xx

在第一列的变长字段列表中存储的信息:

name   roles   变长型  5个字符长度  0x05  字段读取成功
address  为空    字段读取结束
gender   定长型    字段读取结束
class   为空    字段读取结束
hobbies   hobby_xx  变长型   8个字符长度   0x08  字段读取成功

综上所述,根据逆序存放原则,第一列的内容是0x08 0x05

在这里插入图片描述

补充说明:

一个数据页就是16K大
数据页中的数据是一行行记录的
当行很大并且超过了数据页的大小
这就是行溢出

通过数据页里存放指针的bit位将其连接
此时数据页之间会用链表连接起来
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值