MySQL的varchar存储原理:InnoDB记录存储结构
💡
原文中文,约9500字,阅读约需23分钟。
📝
内容提要
MySQL中的dynamic行格式可以提高存储效率和查询性能,避免了单个字段数据过大导致的页分裂问题。溢出列的数据读取可能需要额外的磁盘I/O,但顺序访问时开销不大。
🎯
关键要点
- InnoDB是将表中的数据存储到磁盘上的存储引擎。
- InnoDB通过将数据划分为页来提高读写效率,页的大小默认为16KB。
- 第一次查询时需要从磁盘读取数据,后续查询可直接从内存获取,速度更快。
- MySQL的行格式有四种,默认行格式为Dynamic。
- VARCHAR(M)的M表示字符个数,最大只能为16383个字符,因InnoDB需要记录变长字段的真实字节数。
- 变长字段长度列表和NULL值列表是InnoDB记录额外信息的方式。
- VARCHAR字段的实际存储字节数受到字符集和元数据的影响。
- NULL值列表用于管理允许存储NULL的列,节省存储空间。
- 影响每行实际可用空间的因素包括内部碎片、元数据和行格式。
- 溢出列用于存储超过页面可用空间的字段,避免页分裂问题,提高存储效率和查询性能。
➡️