深入浅出 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 | 兼容旧版本 | 向后兼容 |