BG5BJM HAM 📡

MySQL(InnoDB)8.0行格式

四种行格式的差异

  REDUNDANT
冗余
COMPACT
紧凑
DYNAMIC
动态
COMPRESSED
压缩
Overview
概述
兼容旧版本MySQL 与COMPACT格式相比空间增加了20%,但是会增加部分操作的CPU 与紧凑行格式一致,区别在于变长类型字段完全存储与页外 与动态行格式一致,区别在于支持表和索引数据压缩。控制列的数量
Compact Storage Characteristics
紧凑存储特性
No Yes Yes Yes
Enhanced Variable-Length Column Storage
增强的变长列存储
No No Yes Yes
Large Index Key Prefix Support
支持大索引键前缀
No No Yes Yes
Compression Support
支持压缩
No No No Yes
Supported Tablespace Types
表空间类型
system, file-per-table, general system, file-per-table, general system, file-per-table, general file-per-table, general
Index Key Length Field
索引长度
768字节 768字节 3072字节 3072字节
non-NULL Variable-Length Field
非Null可变长度头
  前面可能有可变长度的头,每个长度占用1—2个字节,取决于列最大长度。只有该列存储在页外等情况才需要2字节。外部存储的列,2字节表示内部数据长度加上指向外部存储部分20字节指针的总长度 与COMPACT一致 与COMPACT一致
Null column vector Field
NULL列标识
  包含1Bit用于标识NULL列,占用CELLING(N/8)字节,N=可为NULL的列数 与COMPACT一致 与COMPACT一致
Link and row-level locking Field
链接记录和行锁
6字节头,用于链接连续记录和行级锁定 5字节头,用于链接连续记录和行级锁定 与COMPACT一致 与COMPACT一致
Field Pointer
字段记录指针
包含指向记录的每个字段的指针。如果字段总长度小于128字节,则指针为1个字节,否则为2个字节。指针指向了数据部分      
User-defined Columns Data
用户列数据
聚集索引记录包含所有用户列数据 记录头后边是非NULL的数据 与COMPACT一致 与COMPACT一致
NULL Store NULL值在记录目录中保留1—2个字节。如果存储在变长列中,NULL值在记录的数据部分保留0字节。固定长度的列,固定长度保留在数据部分,为NULL值保留固定空间允许将NULL值直接更新为非NULL值而不会引起索引碎片      
Transaction ID and Roll pointer Field
事务和回滚指针
6字节事务ID,7字节回滚指针 6字节事务ID,7字节回滚指针 与COMPACT一致 与COMPACT一致
Row ID Field
默认主键
如果没有主键,则定义6字节的ID列 如果没有主键,则定义6字节的ID列 与COMPACT一致 与COMPACT一致
Secondary Index
二级索引
每个二级索引都包含所有主键 每个二级索引都包含所有主键。如果存在可变长度的主键列,那么每个二级索引的记录头都有一个可变长度部分来记录长度,即使该索引定义在了固定长度列。 与COMPACT一致 与COMPACT一致
Variable-Length Field Store Location
变长字段存储位置
页内与页外 页内与页外 变长字段完全存储在页外,仅使用20字节记录指针 数据被压缩以占用更小的页空间
CHAR 长度 最大字符字节长度xN 最少保留N字节,最大为字符字节长度xN。CHAR(N)可变长度字符集会尝试删除尾随空格来存储N字节 与COMPACT一致 与COMPACT一致