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
语法
代码语言:sql复制mysql> alter table sbtest2 modify c varchar(120) column_format compressed;
注:指定压缩的字段不能包含索引
甲骨文MySQL不支持此功能,请切换至Percona MySQL版本。