我有一张存储电子邮件通信的表格。每次有人 回复,整个路径也被包括并保存 数据库(我需要它,因为应用程序的数量 纠正水平的变化太高了。)
mail
文字列的尺寸为10000
。但是,我在存储文本方面遇到了麻烦。由于我不确定,可以发生多少次通信,我不知道该列的数字是多少。
引擎为InnoDB
。我可以在MySQL
中使用某种柱状压缩技术来避免增加列的大小吗?
而且,如果我继续将varchar列增加到20000,该怎么办呢。该表有大约200万条记录。这会是一件好事吗?
答案 0 :(得分:3)
您可能正在寻找MySQL COMPRESS()和UNCOMPRESS()函数来分别压缩数据以进行存储和检索。
答案 1 :(得分:1)
只要数据不需要编辑,就可以使用存档引擎。
答案 2 :(得分:0)
此答案特定于Percona
Percona不久前引入了压缩列格式。您可以在CREATE或ALTER上使用的
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
答案 3 :(得分:0)
对我来说,使用文本数据压缩的最佳方法是使用 Percona 压缩列格式。
ALTER TABLE `tableName` MODIFY `mail` TEXT COLUMN_FORMAT COMPRESSED NOT NULL;
我已经对用作缓存的表进行了压缩测试,主要存储HTML数据,大小从620 MB减小到110.6MB。
我认为您应该考虑使用TEXT类型而不是长VARCHAR。 数据字段与innodb聚集索引分开存储,它可以影响并可能改善数据库的性能。