如何压缩 MySQL 中的列?

How to compress columns in MySQL?

我有一个 table 存储电子邮件通信。每当有人 回复,整个踪迹也被包含并保存到 数据库(我需要这样,因为应用程序的数量 级别更改以纠正太高的级别)。

mail 文本列的大小为 10000。但是,我在存储文本时遇到的问题不止于此。由于我不确定,可以发生多少对应关系,我不知道该列的一个好的数字。

引擎是InnoDB。我可以在 MySQL 中使用某种列压缩技术来避免增加列的大小吗?

而且,如果我继续将 varchar 列增加到比方说 20000 会怎么样。table 有大约 200 万条记录。这会是一件好事吗?

您可能正在寻找 MySQL COMPRESS() and UNCOMPRESS() 函数来分别压缩数据以进行存储和检索。

另请参阅InnoDB Compression Usage

只要数据不需要编辑,就可以使用归档引擎。

此答案特定于 Percona

Percona 不久前引入了压缩 列格式。您可以在 CREATE 或 ALTERs

上使用
CREATE TABLE test_compressed (
    id INT NOT NULL PRIMARY KEY,
    value MEDIUMTEXT COLUMN_FORMAT COMPRESSED
 );

参考:https://www.percona.com/doc/percona-server/5.7/flexibility/compressed_columns.html

对我来说,使用文本数据压缩的最佳方式是使用 Percona 压缩列格式。

ALTER TABLE `tableName` MODIFY `mail` TEXT COLUMN_FORMAT COMPRESSED NOT NULL;

我在table上测试压缩用作缓存,主要存储HTML数据,大小从620MB减少到110.6MB。

我认为您应该考虑使用 TEXT 类型而不是 long VARCHAR。 数据字段与 innodb 聚集索引分开存储,它可以影响并可能提高数据库的性能。

您有几个不同的选择: