有没有办法压缩值列重复的MySQL列?

时间:2016-06-08 11:22:59

标签: php mysql

我有一个带有VARCHAR列的InnoDB表,下面有数万个相同文本的实例。有没有办法在运行中压缩它以节省空间?某种INDEX足够吗?

InnoDB不能看到值是相同的,并通过在内部为它们分配一些ID或其他内容来占用更少的空间吗?

2 个答案:

答案 0 :(得分:2)

如果任务看起来很简单,那么你要找的是标准化。

简单来说,您需要做的是使此列包含另一个表的外键,该表具有此表的值。现在,将更新的值存储在另一个表中,并且当先前存在一个值时,您不需要为表中的值创建另一个条目。在表格和原始表格中形成这种关系,将节省大量空间。

我建议你阅读有关裁员和规范化的内容。

希望它能解决你的问题。

答案 1 :(得分:1)

您可以使用MySQL ENUM数据类型。它将值存储为索引,但在选择时您会看到文本值。

以下是文档: http://dev.mysql.com/doc/refman/5.7/en/enum.html

缺点是并非所有数据库都支持ENUM类型,因此如果有一天您决定切换数据库,您可能会发现这是一个问题。

此处还有一些其他限制: http://dev.mysql.com/doc/refman/5.7/en/enum.html#enum-limits