https://juejin.cn/post/7381333086120345636
行溢出(Row Overflow),是当数据库的行中数据的大小超过了数据库页的最大容量限制时(默认 16K),超出的部分会被存储到额外的页上,同时会附加一个指针指向对应数据页。这个过程就是所谓的 "行溢出"。行溢出触发条件的影响因素包括:行格式、页大小、索引值等。
-- 字段大小超过页容量的一半(也就是8KB)时,会触发行溢出
-- 单行数据多个字段大小总和超过了页大小的阈值(一般是75%),会触发行溢出
-- 一个二级索引元素值太大,导致无法在页中完全存储除了索引外的其余数据,会触发行溢出行溢出机制的优点
-- 灵活性: 行溢出机制为大字段提供额外空间,不用更改表结构
-- 存储效率: 溢出的数据只占用实际需要的空间,避免在固定行的大小的表中存储的浪费
-- 自动管理: 无需人工干预,InnoDB会保证对行的读写操作的原子性和一致性行溢出机制的缺点
-- 间接导致页分裂:...间接导致页分裂(多种情况)
-- 增加内存消耗: 缓冲池中会存储更多的数据页
-- 性能降低: 对于分散在多个页的数据的检索会更慢
-- 增加IO消耗: 在写入操作中,对于行溢出需要更多的 IO 操作来处理数据
-- 索引限制: 行溢出会影响索引的的正常使用如何避免行溢出
-- 合理设计表,尽量避免字段冗余、低效
-- 选择合适的字段类型,并给出合理的字段长度
-- 合理使用索引
-- 定时监控和分析,合理调整配置,如缓冲池大小、页大小
-- 对于某些频繁更改的大字段考虑是否有别的存储方案
行溢出(Row Overflow),是当数据库的行中数据的大小超过了数据库页的最大容量限制时(默认 16K),超出的部分会被存储到额外的页上,同时会附加一个指针指向对应数据页。这个过程就是所谓的 "行溢出"。
行溢出触发条件的影响因素包括:行格式、页大小、索引值等。
-- 字段大小超过页容量的一半(也就是8KB)时,会触发行溢出
-- 单行数据多个字段大小总和超过了页大小的阈值(一般是75%),会触发行溢出
-- 一个二级索引元素值太大,导致无法在页中完全存储除了索引外的其余数据,会触发行溢出
行溢出机制的优点
-- 灵活性: 行溢出机制为大字段提供额外空间,不用更改表结构
-- 存储效率: 溢出的数据只占用实际需要的空间,避免在固定行的大小的表中存储的浪费
-- 自动管理: 无需人工干预,InnoDB会保证对行的读写操作的原子性和一致性
行溢出机制的缺点
-- 间接导致页分裂:...间接导致页分裂(多种情况)
-- 增加内存消耗: 缓冲池中会存储更多的数据页
-- 性能降低: 对于分散在多个页的数据的检索会更慢
-- 增加IO消耗: 在写入操作中,对于行溢出需要更多的 IO 操作来处理数据
-- 索引限制: 行溢出会影响索引的的正常使用
如何避免行溢出
-- 合理设计表,尽量避免字段冗余、低效
-- 选择合适的字段类型,并给出合理的字段长度
-- 合理使用索引
-- 定时监控和分析,合理调整配置,如缓冲池大小、页大小
-- 对于某些频繁更改的大字段考虑是否有别的存储方案
作者:Raymond_Don链接:https://juejin.cn/post/7381333086120345636来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。