MySQL数据类型存储空间占用字符串

2024年 3月 1日 61.0k 0

先上一张官方文档的截图

看起来很复杂,实际还是较简单的
用W来表示1个字符在字符集下的最大占用
比如:utf8为3,utf8mb4就为4

char(M) 所占的空间就是 M*W 字节
varchar(M) 占用空间为两种
1、如果M*W255 最大占用空间即为 2 + M*W

看到这个文档时。我以为key_len也是按此规则来计算的,实际不是。来看一个实例

drop table stt;
create table stt
( id int not null,
str1 char(10) not null,
str2 varchar(60) not null,
str3 varchar(70) not null,
primary key(id)
) engine = InnoDB default charset = utf8mb4 ROW_FORMAT=COMPACT ;

insert into stt
values(1,'abcd','abcd','abcd');
alter table stt add index idx1(str1),add index idx2(str2),add index idx3(str3);

explain
select 1 from stt where str1 = 'abcd';
explain
select 1 from stt where str2 = 'abcd';
explain
select 1 from stt where str3 = 'abcd';

执行计划1

ken_len = 10*4 = 40 符合上面的公式 M*W

执行计划2

ken_len = 4*60 +2
按照上面公式 我觉得该为 4*60 + 1 = 241 而实际为 4*60 + 2 = 242 说明key_len 始终按最大可能占用的字节来算的

执行计划3

ken_len = 70*4 + 2 = 282 符合上面的公式 M*W + 2

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论