InnoDB的行格式

  一直对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

原文地址:https://www.cnblogs.com/smallzhen/p/14575533.html