一直对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
最新评论