14.9.1.2 创建压缩 table

压缩 table 可以在file-per-tabletable 空间或general tablespaces中创建。table 压缩不适用于 InnoDB system tablespace。系统 table 空间(空间 0,.ibdata files)可以包含用户创建的 table,但也包含内部系统数据,该数据永远不会被压缩。因此,压缩仅适用于每个 table 文件或常规 table 空间中存储的 table(和索引)。

在“每 table 文件”table 空间中创建压缩 table

要在每个 table 文件 table 空间中创建压缩 table,必须启用innodb_file_per_table(MySQL 5.6.6 中的默认设置),并且innodb_file_format必须设置为Barracuda。您可以在 MySQL 配置文件(my.cnfmy.ini)中或使用SET语句动态设置这些参数。

配置innodb_file_per_tableinnodb_file_format选项后,请在CREATE TABLEALTER TABLE语句中指定ROW_FORMAT=COMPRESSED子句或KEY_BLOCK_SIZE子句,或同时指定两者,以在每个 table 文件 table 空间中创建压缩 table。

例如,您可能使用以下语句:

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;
在常规 table 空间中创建压缩 table

要在常规 table 空间中创建压缩 table,必须为常规 table 空间定义FILE_BLOCK_SIZE,该名称在创建 table 空间时指定。 FILE_BLOCK_SIZE值必须是相对于innodb_page_size值的有效压缩页面大小,并且由CREATE TABLEALTER TABLE KEY_BLOCK_SIZE子句定义的压缩 table 的页面大小必须等于FILE_BLOCK_SIZE/1024。例如,如果innodb_page_size=16384FILE_BLOCK_SIZE=8192,则 table 的KEY_BLOCK_SIZE必须为 8.有关更多信息,请参见第 14.6.3.3 节“常规 table 空间”

下面的示例演示如何创建常规 table 空间并添加压缩 table。该示例假定默认innodb_page_size为 16K。 8192 的FILE_BLOCK_SIZE要求压缩 table 的KEY_BLOCK_SIZE为 8.

mysql> CREATE TABLESPACE `ts2` ADD DATAFILE 'ts2.ibd' FILE_BLOCK_SIZE = 8192 Engine=InnoDB;

mysql> CREATE TABLE t4 (c1 INT PRIMARY KEY) TABLESPACE ts2 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
Notes
压缩 table 的限制
首页