InnoDB在之前提供了两种压缩技术

一种是早期的行格式压缩(COMPRESSED Row Format),该方法是在创建表时指定“ROW_FORMAT=COMPRESS”,并通过选项 KEY_BLOCK_SIZE 设置压缩比例。

另一种是新的页面压缩,在支持稀疏文件(Sparse file)的EXT4/XFS文件系统上,通过使用打洞(Punch Hole)特性进行压缩。

现在InnoDB支持对某一列(字段)进行压缩,它使列中存储的数据在写入存储时被压缩,并在读取时被解压缩。


三者之间的区别

压缩粒度不同

  • 行格式压缩和页面压缩是以整行或整页为压缩单位
  • 列压缩则是对指定的某些列单独进行压缩


支持下列类型

  • BLOB (including TINYBLOB, MEDIUMBLOB, LONGBLOG)
  • TEXT (including TINYTEXT, MEDUUMTEXT, LONGTEXT)
  • VARCHAR (including NATIONAL VARCHAR)
  • VARBINARY
  • JSON


语法

mysql> alter table sbtest2 modify c varchar(120) column_format compressed;

注:指定压缩的字段不能包含索引

现在InnoDB支持对某一列(字段)进行压缩_字段

甲骨文MySQL不支持此功能,请切换至Percona MySQL版本。