mysql在创建表时会默认增加一个row_format的字段,这个字段表明了innodb存储引擎存储文件时所使用的行的格式。很早之前innodb只有一种行记录格式,所以不需要为文件格式命名,后来随着innodb的发展,文件格式逐渐多了,所以便有了row_format。
之前的文件格式:antelope。mysql5.6默认使用的文件格式,支持两种行格式,compact以及redundant。
现在的文件格式:barracuda。mysql5.7默认使用的文件格式,支持compressed以及dynamic两种格式。
| row format | 紧凑存储 | 可变长度存储增强 | 支持较长前缀索引 | 支持压缩 | 支持的表空间类型 | 对应的文件格式类型 |
|---|---|---|---|---|---|---|
| redundant | 否 | 否 | 否 | 否 | system, file-per-table, general |
antelope, barracuda |
| compact | 是 | 否 | 否 | 否 | system, file-per-table, general |
antelope, barracuda |
| dynamic | 是 | 是 | 是 | 否 | system, file-per-table, general |
barracuda |
| compressed | 是 | 是 | 是 | 是 | file-per-table, general |
barracuda |
redundant行格式是最基本的行格式,compact会比redundant格式节省约20%的空间,但对于某些操作会消耗
更多的cpu。redundant与compact的行格式都只能支持768个字节的索引。
dynamic行格式与compact行格式的存储基本相同,但是提高了可变长度字段的存储以及支持更大的前缀索引,会扩展到3072个字节。支持更大的前缀索引的行为由innodb_large_prefix这个变量控制,默认打开。compressed行格式的存储方式与dynamic的一致,但是提供了表跟索引数据的压缩功能。
表的默认的row format由innodb_default_row_format变量控制,默认是dynamic。innodb_default_row_format只有三个枚举值,redundant,compact,dynamic。compressed不支持,因为system类型的表空间不支持compressed。
