一 InnoDB文件存储结构

InnoDB数据文件存储结构: 分为一个ibd数据文件-->Segment(段)-->Extent(区)-->Page(页)-->Row(行)
- Tablesapce 表空间,用于存储多个ibd数据文件,用于存储表的记录和索引。一个文件包含多个段。
- Segment段,用于管理多个Extent,分为数据段(Leaf node segment)、索引段(Non-leaf node segment)、回滚段(Rollback segment)。一个表至少会有两个segment,一个管理数据,一个管理索引。每多创建一个索引,会多两个segment。
- Extent 区,一个区固定包含64个连续的页,大小为1M。当表空间不足,需要分配新的页资源,不会一页一页分,直接分配一个区。
- Page页,用于存储多个Row行记录,大小为16K。包含很多种页类型,比如数据页,undo页,系 统页,事务数据页,大的BLOB对象页。
- Row行,包含了记录的字段值,事务ID(Trx id)、滚动指针(Roll pointer)、字段指针(Field pointers)等信息。
四、Row行格式(Row_format) 表的行格式决定了它的行是如何物理存储的,这反过来又会影响查询和DML操作的性能。如果在 单个page页中容纳更多行,查询和索引查找可以更快地工作,缓冲池中所需的内存更少,写入更 新时所需的I/O更少。 InnoDB存储引擎支持四种行格式:REDUNDANT、COMPACT、DYNAMIC和COMPRESSED。
DYNAMIC和COMPRESSED新格式引入的功能有:数据压缩、增强型长列数据的页外存储和大索引 前缀。 每个表的数据分成若干页来存储,每个页中采用B树结构存储; 如果某些字段信息过长,无法存储在B树节点中,这时候会被单独分配空间,此时被称为溢出页,该字段被称为页外列。
- REDUNDANT 行格式使用REDUNDANT行格式,表会将变长列值的前768字节存储在B树节点的索引记录中,其余 的存储在溢出页上。对于大于等于786字节的固定长度字段InnoDB会转换为变长字段,以便 能够在页外存储。
- COMPACT 行格式与REDUNDANT行格式相比,COMPACT行格式减少了约20%的行存储空间,但代价是增加了 某些操作的CPU使用量。如果系统负载是受缓存命中率和磁盘速度限制,那么COMPACT格式 可能更快。如果系统负载受到CPU速度的限制,那么COMPACT格式可能会慢一些。
- DYNAMIC 行格式使用DYNAMIC行格式,InnoDB会将表中长可变长度的列值完全存储在页外,而索引记录只 包含指向溢出页的20字节指针。大于或等于768字节的固定长度字段编码为可变长度字段。 DYNAMIC行格式支持大索引前缀,最多可以为3072字节,可通过innodb_large_prefix参数 控制。
- COMPRESSED 行格式 COMPRESSED行格式提供与DYNAMIC行格式相同的存储特性和功能,但增加了对表和索引 数据压缩的支持。
本文由 chaoohuua 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2025/12/18 13:37