启用 MySQL 压缩

mysqlmysqli database

在创建压缩表之前,请确保已启用 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 语法的一部分。因此,如果指定了这些属性,则会被忽略。


相关文章