Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

17.9.1.1 表压缩概述

由于处理器和缓存内存的速度增长速度超过磁盘存储设备,因此许多工作负载都是 磁盘绑定。数据 压缩 可以实现较小的数据库大小、减少 I/O 和提高吞吐量,以小的 CPU 利用率为代价。压缩对于读取密集型应用程序尤其有价值,特别是在具有足够 RAM 的系统中,可以将频繁使用的数据保持在内存中。

使用 ROW_FORMAT=COMPRESSED 创建的 InnoDB 表可以在磁盘上使用比配置的 页大小 小的页大小。较小的页大小需要从磁盘读取和写入的 I/O 少,特别是在 固态硬盘 设备上尤其有价值。

压缩页大小通过 CREATE TABLEALTER TABLE KEY_BLOCK_SIZE 参数指定。不同的页大小要求表被放置在 每个表文件 表空间或 通用表空间 中,而不是在 系统表空间 中,因为系统表空间不能存储压缩表。有关更多信息,请参阅 第 17.6.3.2 节,“每个表文件表空间”第 17.6.3.3 节,“通用表空间”

压缩级别不管 KEY_BLOCK_SIZE 值如何。随着您指定较小的 KEY_BLOCK_SIZE 值,您将获得越来越小的页大小的 I/O 优势。但是,如果您指定的值太小,将会增加重新组织页的开销,以便在一页中容纳多行数据。 KEY_BLOCK_SIZE 的最小值取决于每个索引的键列的长度。如果您指定的值太小,CREATE TABLEALTER TABLE 语句将失败。

在缓冲池中,压缩数据被保存在小页中,页大小基于 KEY_BLOCK_SIZE 值。对于提取或更新列值,MySQL 还在缓冲池中创建一个未压缩的页,以便访问未压缩的数据。在缓冲池中,对未压缩页的任何更新也将被重新写回相应的压缩页。您可能需要调整缓冲池的大小,以容纳压缩和未压缩页的额外数据,尽管未压缩页将在缓冲池中被 驱逐,然后在下一次访问时重新解压缩。