2019-04-17InnoDB记录存储结构

2019-06-17  本文已影响0人  括儿之家

4种不同类型的行格式,分别是Compact、Redundant、Dynamic和Compressed行格式

1 compact

如果表中没有允许存储 NULL 的列,则 NULL值列表 也不存在了,否则将每个允许存储NULL的列对应一个二进制位,二进制位按照列的顺序逆序排列,二进制位表示的意义如下:

二进制位的值为1时,代表该列的值为NULL。

二进制位的值为0时,代表该列的值不为NULL。

因为表record_format_demo有3个值允许为NULL的列,所以这3个列和二进制位的对应关系就是这样:

二进制位按照列的顺序逆序排列,所以第一个列c1和最后一个二进制位对应。

记录的真实数据

对于record_format_demo表来说,记录的真实数据除了c1、c2、c3、c4这几个我们自己定义的列的数据以外,MySQL会为每个记录默认的添加一些列(也称为隐藏列),具体的列如下:

列名是否必须占用空间描述

小贴士: 实际上这几个列的真正名称其实是:DB_ROW_ID、DB_TRX_ID、DB_ROLL_PTR,我们为了美观才写成了row_id、transaction_id和roll_pointer。

页是MySQL中磁盘和内存交互的基本单位,也是MySQL是管理存储空间的基本单位。

指定和修改行格式的语法如下:

CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称

ALTER TABLE 表名 ROW_FORMAT=行格式名称

InnoDB目前定义了4种行格式

COMPACT行格式

具体组成如图:

Redundant行格式

具体组成如图:

Dynamic和Compressed行格式

这两种行格式类似于COMPACT行格式,只不过在处理行溢出数据时有点儿分歧,它们不会在记录的真实数据处存储字符串的前768个字节,而是把所有的字节都存储到其他页面中,只在记录的真实数据处存储其他页面的地址。

另外,Compressed行格式会采用压缩算法对页面进行压缩。

一个页一般是16KB,当记录中的数据太多,当前页放不下的时候,会把多余的数据存储到其他页中,这种现象称为行溢出。

上一篇 下一篇

猜你喜欢

热点阅读