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

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

内容提要

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

🎯

关键要点

  • InnoDB是将表中的数据存储到磁盘上的存储引擎。

  • InnoDB通过将数据划分为页来提高读写效率,页的大小默认为16KB。

  • 第一次查询时需要从磁盘读取数据,后续查询可直接从内存获取,速度更快。

  • MySQL的行格式有四种,默认行格式为Dynamic。

  • VARCHAR(M)的M表示字符个数,最大只能为16383个字符,因InnoDB需要记录变长字段的真实字节数。

  • 变长字段长度列表和NULL值列表是InnoDB记录额外信息的方式。

  • VARCHAR字段的实际存储字节数受到字符集和元数据的影响。

  • NULL值列表用于管理允许存储NULL的列,节省存储空间。

  • 影响每行实际可用空间的因素包括内部碎片、元数据和行格式。

  • 溢出列用于存储超过页面可用空间的字段,避免页分裂问题,提高存储效率和查询性能。

🏷️

标签

➡️

继续阅读