一直对InnoDB的行格式不太了解,于是找了几篇文章看了一下,总结一下

什么是行格式

  我们平时以记录为单位向表中插入数据,这些记录在磁盘上的存放方式被称为「行格式」或「记录格式」。

  行格式的应用是针对于表的,只有创建表的时候使用行格式,在创建库或插入数据的时候无法选择行格式。

  表的行格式决定了这张表下面的物理存储方式,会影响查询和DML操作的性能。

InnoDB的行格式分成以下4种

Compact(行格式)

比Redundant格式存储空间减少20%,查询速度更快。 
如果存在大量运算,可能会比Redundant慢。
使用这种格式的页,前768字节的变长列值存在B树索引记录中,其余的字段被存储在溢出页上。
列值小于等于768字节,不使用溢出页,完全存储在B树索引中,节省IO。 

Redundant(冗余行格式)

把前768字节的变长列值存在B树节点的索引记录中,多余的字节从会被存在溢出页,如果小于768字节,则列值在B树中,节省了IO操作。  
对于一些列类型为blob的较短值友好。

Dynamic(动态行格式)

跟compact相同的行存储方式
长可变列
更大的索引键前缀的存储能力
支持索引键前缀3072字节。  

Compressed(压缩行格式)

与Dynamic行格式相同的存储特性和功能,在这个基础上添加了对标和索引数的支持。
需要启用Innodb_file_per_table

 各个行格式的优缺点:

行格式 紧凑的存储特性 增强的可变长度色谱柱存储 大索引键前缀支持 压缩支持 支持的表空间类型
Redundant 系统,每表文件,常规
Compact 系统,每表文件,常规
Dynamic 系统,每表文件,常规
Compressed 每表档案,一般

参考:https://mp.weixin.qq.com/s/fgpk-DRqrAma5lauNxT6WQ、https://mp.weixin.qq.com/s/8Ma5BjQuDQrxWVtgvqS4UQ、https://blog.csdn.net/fhdsece/article/details/104974697