启用 MySQL 压缩!
在创建压缩表之前,请确保启用了innodb_file_per_table配置选项,并将innodb_file_format设置为Barracuda。这些参数可以在MySQL配置文件my.cnf或my.ini中找到,或者使用SET语句,无需关闭MySQL服务器。
要对表启用压缩,可以在CREATETABLE或ALTERTABLE语句中使用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值的影响。
表的所有索引(包括聚集索引)都将使用相同的页面大小进行压缩,这在CREATETABLE或ALTERTABLE语句中指定。ROW_FORMAT和KEY_BLOCK_SIZE等表属性不被视为InnoDB表的CREATEINDEX语法的一部分。因此,如果指定了它们,它们将被忽略。