行溢出后,MySQL 是怎么处理的?

总结

InnoDB 的数据都是存放在 「数据页」中。但是当发生行溢出时,一个数据页存不了一条记录,InnoDB 存储引擎会自动将溢出的数据存放到「溢出页」中。

  • Compact 行格式使用部分的行溢出方式:当发生行溢出时,在记录的真实数据处只会保存该列的一部分数据,而把剩余的数据放在「溢出页」中,然后真实数据处用 20 字节存储指向溢出页的地址,从而可以找到剩余数据所在的页。
  • Compressed 和 Dynamic 这两种格式采用完全的行溢出方式,记录的真实数据处只存储 20 个字节的指针来指向溢出页。而实际的数据都存储在溢出页中。

部分的行溢出方式

当发生行溢出时,在记录的真实数据处只会保存该列的一部分数据,而把剩余的数据放在「溢出页」中,然后真实数据处用 20 字节存储指向溢出页的地址,从而可以找到剩余数据所在的页。Compact 行格式处理大致如下图所示。

完全的行溢出方式

Compressed 和 Dynamic 这两种格式采用完全的行溢出方式,记录的真实数据处只存储 20 个字节的指针来指向溢出页。而实际的数据都存储在溢出页中。