MySQL的varchar存储原理:InnoDB记录存储结构

💡 原文中文,约9500字,阅读约需23分钟。
📝

内容提要

MySQL中的dynamic行格式可以提高存储效率和查询性能,避免了单个字段数据过大导致的页分裂问题。溢出列的数据读取可能需要额外的磁盘I/O,但顺序访问时开销不大。

🎯

关键要点

  • InnoDB是将表中的数据存储到磁盘上的存储引擎。
  • InnoDB通过将数据划分为页来提高读写效率,页的大小默认为16KB。
  • 第一次查询时需要从磁盘读取数据,后续查询可直接从内存获取,速度更快。
  • MySQL的行格式有四种,默认行格式为Dynamic。
  • VARCHAR(M)的M表示字符个数,最大只能为16383个字符,因InnoDB需要记录变长字段的真实字节数。
  • 变长字段长度列表和NULL值列表是InnoDB记录额外信息的方式。
  • VARCHAR字段的实际存储字节数受到字符集和元数据的影响。
  • NULL值列表用于管理允许存储NULL的列,节省存储空间。
  • 影响每行实际可用空间的因素包括内部碎片、元数据和行格式。
  • 溢出列用于存储超过页面可用空间的字段,避免页分裂问题,提高存储效率和查询性能。
➡️

继续阅读