MySQL行格式详解

1 指定行格式的语法

create table recode_format(
	c1 varchar(10),
    c2 varchar(10) not null
)charset=ascii ROW_FORMAT=COMPACT;

2 compact行格式

2.1 变长字段列表

在这里插入图片描述

由最开始的建表语句可知,表中只有两个列,假设现在插入一些值进入表中

insert into recode_format(c1, c2) 
	values
("aaa", "bbbbb"), # 第一条记录
("a","bbb")		  # 第二条记录

在这里插入图片描述

2.2 NULL值列表

  1. 先统计表中允许NULL值的列有哪些
  2. 若全部不允许NULL,则NULL列表就可以不存在了
  3. 允许NULL值的列如果是NULL,对应的二进制位的bit就设置为1,存放顺序逆序!
    • 1 : NULL
    • 0 : 有值
create table recode_format(
	c1 varchar(10),
    c2 varchar(10) not null,
    c3 varchar(10),
    c4 varchar(10),
)charset=ascii ROW_FORMAT=COMPACT;

在这里插入图片描述

现在插入一条记录

insert into recode_format(c1, c2, c3, c4) 
	values
("aaa", "bbbbb", NULL, NULL)

在这里插入图片描述

2.3 记录头信息

在这里插入图片描述

2.4 真实的记录

2.4.1 主键生成策略

  • 无自定义主键:选取不允许存储NULL的UNIQUE列作为主键
  • 没有符合要求的UNIQUE列:添加一个row_id隐藏列作为主键

2.4.2 其他

  1. trx_id
  2. roll_pointer

在这里插入图片描述

2.5 溢出列

存储一部分数据,其余的数据如果特别多就分散在其他几个页中,然后用20字节存储指向这些页的地址和长度

在这里插入图片描述

3 DYNAMIC行格式

MySQL 5.7 默认

COMPACT格式的唯一区别就是:溢出列所有真实数据全部存储在另外的页中,768字节都不存储,只存储一个指针

4 COMPRESSED行格式

基于DYNAMIC去做数据压缩,节省空间

5 REDUNDANT行格式

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值