InnoDB磁盘结构详解 深入探究InnoDB的磁盘结构(3)
InnoDB磁盘结构详解
行
数据行即一行一行的数据。MySQL中单行数据最大能存储64KB=65535B,故表中字段长度加起来如果超过该值就会拒绝创建表。以utf8mb4字符集下varchar(M)为例,该字符集下一个字符最多需要4B表示,如果M大于16383,那么总字节数就会超过4*16383=65532B,所以M的最大值就是16383个字符。
虽然单行数据最大值远大于单页(16KB),但MySQL为了在单页中至少存储2行数据(每行8KB),引入了行溢出机制,即只要一行记录的总和超过8KB,就会溢出,比如varchar(9000) 或者 varchar(3000) + varchar(3000) + varchar(3000),当实际长度大于8k的时候,会对最大字段使用uncompress BLOB page单独存储(即一个字段独享一个或多个页),而在Barracuda文件格式下字段本身只会用20B存储溢出行的地址和占用的字节数。
InnoDB的文件格式包括旧格式Antelope和新格式Barracuda(DMS使用该格式),两者主要的不同在于对存储数据时所占用的空间差异,每种文件格式有自己支持的行格式,行格式就是指数据行的存储方式,包括是否紧凑存储(占用磁盘空间)、是否可变长度存储、大索引前缀支持、压缩支持。差异如下:
| 行格式 | 紧凑的存储特性 | 增强的可变长度列存储 | 大索引键前缀支持 | 压缩支持 | 支持的表空间类型 | 所需文件格式 |
| REDUNDANT(冗余) | 否 | 否 | 否 | 否 | system, file-per-table, general | Antelope or Barracuda |
| COMPACT(紧凑) | 是 | 否 | 否 | 否 | system, file-per-table, general | Antelope or Barracuda |
| DYNAMIC(动态) | 是 | 是 | 是 | 否 | system, file-per-table, general | Barracuda |
| COMPRESSED(压缩) | 是 | 是 | 是 | 是 | file-per-table, general | Barracuda |
通过下列指令可以查询到数据库的文件格式和行格式配置:
show variables like "InnoDB_file_format";
show variables like "InnoDB_default_row_format";
REDUNDANT和其他几种类型的区别在就是在于首部的内容区别。REDUNDANT的存储格式为首部是一个字段长度偏移列表(每个字段占用的字节长度及其相应的位移),其他类型的存储格式为首部是一个非NULL的变长字段长度列表,这种方式存储数据会更加紧凑(页中存放的行数越多,性能就越高),数据布局如下图:
相关阅读
-
内存不兼容怎么解决 内存不兼容升级bios解决方法
本文摘要:内存不兼容怎么解决和内存不兼容升级bios解决方法方面的知识,一定能解决您的问题的,一起来了解吧! 内存是工业主板中重要的部件之一,主要用于暂存CPU中的运算数据和外部存
-
ipv6无internet访问权限是什么意思 ipv4与ipv6无internet访问权限是什么意思
一篇小知识,与您分享ipv6无internet访问权限是什么意思的相关经验,关于ipv6无internet访问权限是什么意思,接下来小编为网友介绍。 ipv6无internet访问权限,意思是没有从DHCP服务器获得分配的
-
主板acpi设置 Win7主板不支持acpi解决教程
本文核心内容:Win7主板不支持acpi解决教程IT技巧方面的经验,关于主板acpi设置 Win7主板不支持acpi解决教程,一起跟随小编看看吧! 使用win7系统刷bios的时候,有很多的用户遇到了不支持acpi的
-
迅捷路由器初始密码手机设置 忘记家里的wifi密码的解决技巧
今天小编介绍迅捷路由器初始密码手机设置和忘记家里的wifi密码的解决技巧的介绍,一起来看看吧! 迅捷(FAST)路由器怎么隐藏wifi信号?家里有一台迅捷(FAST)无线路由器,为了防止被别人蹭网


