深入浅出 MySQL InnoDB存储结构全解析:表空间、段、区、页与行格式

InnoDB数据文件存储结构

层级化管理方式:Tablespace(表空间)→ Segment(段)→ Extent(区)→ Page(页)→ Row(行)

1. Tablespace(表空间)

  • 作为最高层级的存储单元
  • 每个表通常对应一个独立的表空间文件
  • 系统表空间存储共享的系统信息

2. Segment(段)

  • 数据段(Leaf Node Segment):存储B+树的叶子节点数据
  • 索引段(Non-leaf Node Segment):存储B+树的非叶子节点数据
  • 回滚段(Rollback Segment):存储事务回滚所需信息

3. Extent(区)

  • 固定大小1MB(64个连续页×16KB/页)
  • 采用预分配策略,减少碎片化

4. Page(页)

  • 固定大小16KB
  • 主要类型:数据页、Undo页、系统页、BLOB页

5. Row(行)

  • 事务ID(Trx Id)
  • 回滚指针(Roll Pointer)
  • 字段指针
  • 实际列数据

文件格式

Antelope格式

  • 支持较旧的行格式
  • REDUNDANT:兼容性最好
  • COMPACT:默认行格式

Barracuda格式

  • 支持所有行格式
  • DYNAMIC:针对可变长度列优化
  • COMPRESSED:支持表和索引数据压缩
SET GLOBAL innodb_file_format='Barracuda';

ALTER TABLE 表名 ROW_FORMAT = 格式类型

行格式详解

各格式详细对比

行格式特点适用场景
COMPACT节省空间通用场景
DYNAMIC对大行处理更好大字段多的表
COMPRESSED支持压缩存储存储空间受限
REDUNDANT兼容旧版本向后兼容