https://juejin.cn/post/7381333086120345636

行溢出(Row Overflow),是当数据库的行中数据的大小超过了数据库页的最大容量限制时(默认 16K),超出的部分会被存储到额外的页上,同时会附加一个指针指向对应数据页。这个过程就是所谓的 "行溢出"。行溢出触发条件的影响因素包括:行格式、页大小、索引值等。

-- 字段大小超过页容量的一半(也就是8KB)时,会触发行溢出

-- 单行数据多个字段大小总和超过了页大小的阈值(一般是75%),会触发行溢出

-- 一个二级索引元素值太大,导致无法在页中完全存储除了索引外的其余数据,会触发行溢出行溢出机制的优点

-- 灵活性:   行溢出机制为大字段提供额外空间,不用更改表结构

-- 存储效率: 溢出的数据只占用实际需要的空间,避免在固定行的大小的表中存储的浪费

-- 自动管理: 无需人工干预,InnoDB会保证对行的读写操作的原子性和一致性行溢出机制的缺点

-- 间接导致页分裂:...间接导致页分裂(多种情况)

-- 增加内存消耗:  缓冲池中会存储更多的数据页

-- 性能降低:      对于分散在多个页的数据的检索会更慢

-- 增加IO消耗:   在写入操作中,对于行溢出需要更多的 IO 操作来处理数据

-- 索引限制:      行溢出会影响索引的的正常使用如何避免行溢出

-- 合理设计表,尽量避免字段冗余、低效

-- 选择合适的字段类型,并给出合理的字段长度

-- 合理使用索引

-- 定时监控和分析,合理调整配置,如缓冲池大小、页大小

-- 对于某些频繁更改的大字段考虑是否有别的存储方案

作者:Raymond_Don链接:https://juejin.cn/post/7381333086120345636来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

行数据过大时(行大小超过页的一半) MySQL 是如何处理的?