如何在MySQL中压缩列?

4
我有一张表格保存电子邮件通讯记录,每次有人回复,整个对话的正文也会被保存到数据库中(我需要这样做,因为纠正此问题所需的应用级更改将过高)。这个mail文本列的大小是10000。但是,我无法存储超过该长度的文本。由于我不确定有多少通信可能发生,因此我不知道该列的合适长度应该是什么。引擎是InnoDB。我能否在MySQL中使用某种列压缩技术来避免增加列的大小?如果我继续将varchar列增加到20000,那怎么办?该表大约有200万条记录。这样做是明智的吗?

@D4V1D - 谢谢你的编辑。我会记住的 :) - MontyPython
5个回答

4

在后端使用 JPA 查询,必须寻找一种解决方案以相同的方式提取数据,因为数据是电子邮件或 Twitter 动态等。 - MontyPython
2
COMPRESS()不起作用,除非您更改为VARBINARYBLOB。(我假设这是不允许的。)InnoDB压缩可能是唯一的选择;但这只会给你2倍的提升。 - Rick James

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

所有的表都在InnoDB上。我不会改变它。 - MontyPython

1

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

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

我已经在用作缓存的表上测试了压缩,主要存储HTML数据,大小从620MB减小到110.6MB。

我认为你应该考虑使用TEXT类型而不是长VARCHAR。数据字段与innodb聚簇索引分别存储,这可能会影响并改善数据库的性能。


不知何故,这个不起作用。必须删除“COLUMN_FORMAT”才能使其工作。 - Feng Jiang
这是Percona特定的函数,无法在Oracle MySQL中工作。 - P.W-S

1

0

你有几个不同的选择:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接