启用MySQL压缩
在创建压缩表之前,请确保已启用innodb_file_per_table配置选项,并将innodb_file_format设置为Barracuda。这些参数可以在MySQL配置文件my.cnf或my.ini中找到,或者使用SET语句设置,而无需关闭MySQL服务器。
要为表启用压缩,可以在CREATE TABLE或ALTER TABLE语句中使用ROW_FORMAT=COMPRESSED、KEY_BLOCK_SIZE或两者。
让我们看看创建压缩表的语句:
查询
SET GLOBAL innodb_file_per_table=1; SET GLOBAL innodb_file_format=Barracuda; CREATE TABLE t1 (c1 INT PRIMARY KEY) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
这里:
如果指定了ROW_FORMAT=COMPRESSED,则可以省略KEY_BLOCK_SIZE。
将使用默认的页面大小值,这相当于innodb_page_size值的一半。
如果指定了KEY_BLOCK_SIZE,则可以省略ROW_FORMAT=COMPRESSED。
压缩将自动启用。
要确定KEY_BLOCK_SIZE属性的最佳值,用户需要创建具有不同该子句值的同一表的多个副本。
完成此操作后,测量生成的.ibd文件的大小,并确定每个文件在实际工作负载下的性能。
KEY_BLOCK_SIZE值被视为提示。
如果innodb_strict_mode=ON,并且指定了无效的KEY_BLOCK_SIZE值,则会返回错误。
InnoDB数据页的默认未压缩大小为16KB。根据选项值的组合,MySQL将对表的.ibd文件使用1KB、2KB、4KB、8KB或16KB的页面大小。
实际的压缩算法不受KEY_BLOCK_SIZE值的影响。
表的全部索引,包括聚簇索引,都将使用在CREATE TABLE或ALTER TABLE语句中指定的相同页面大小进行压缩。ROW_FORMAT和KEY_BLOCK_SIZE等表属性不被视为InnoDB表的CREATE INDEX语法的组成部分。因此,如果指定了它们,则会被忽略。