行溢出后,MySQL 是怎么处理的?
总结
InnoDB 的数据都是存放在 「数据页」中。但是当发生行溢出时,一个数据页存不了一条记录,InnoDB 存储引擎会自动将溢出的数据存放到「溢出页」中。
- Compact 行格式使用部分的行溢出方式:当发生行溢出时,在记录的真实数据处只会保存该列的一部分数据,而把剩余的数据放在「溢出页」中,然后真实数据处用 20 字节存储指向溢出页的地址,从而可以找到剩余数据所在的页。
- Compressed 和 Dynamic 这两种格式采用完全的行溢出方式,记录的真实数据处只存储 20 个字节的指针来指向溢出页。而实际的数据都存储在溢出页中。
部分的行溢出方式
当发生行溢出时,在记录的真实数据处只会保存该列的一部分数据,而把剩余的数据放在「溢出页」中,然后真实数据处用 20 字节存储指向溢出页的地址,从而可以找到剩余数据所在的页。Compact 行格式处理大致如下图所示。
完全的行溢出方式
Compressed 和 Dynamic 这两种格式采用完全的行溢出方式,记录的真实数据处只存储 20 个字节的指针来指向溢出页。而实际的数据都存储在溢出页中。