Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有没有办法压缩值经常重复的MySQL列?_Php_Mysql - Fatal编程技术网

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

Php 有没有办法压缩值经常重复的MySQL列?,php,mysql,Php,Mysql,我有一个带有VARCHAR列的InnoDB表,下面有成千上万个相同文本的实例。为了节省空间,有没有一种方法可以在运行中对其进行压缩?某种索引是否足够 InnoDB不能看到这些值是相同的,并且通过内部分配一些ID或其他什么来使用更少的空间吗?如果任务看起来很简单,那么您需要的是规范化 简单来说,您需要做的是使此列包含另一个表的外键,该表具有此表的值。现在,将较新的值存储在另一个表中,如果以前存在某个值,则无需在表中为该值创建另一个条目。形成表格之间的这种关系,在原始表格中可以节省大量空间 我建议

我有一个带有VARCHAR列的InnoDB表,下面有成千上万个相同文本的实例。为了节省空间,有没有一种方法可以在运行中对其进行压缩?某种索引是否足够



InnoDB不能看到这些值是相同的,并且通过内部分配一些ID或其他什么来使用更少的空间吗?

如果任务看起来很简单,那么您需要的是规范化

简单来说,您需要做的是使此列包含另一个表的外键,该表具有此表的值。现在,将较新的值存储在另一个表中,如果以前存在某个值,则无需在表中为该值创建另一个条目。形成表格之间的这种关系,在原始表格中可以节省大量空间

我建议你仔细阅读有关冗余和正常化的内容


希望它能解决您的问题。

如果任务像看上去那样简单,那么您需要的是正常化

简单来说,您需要做的是使此列包含另一个表的外键,该表具有此表的值。现在,将较新的值存储在另一个表中,如果以前存在某个值,则无需在表中为该值创建另一个条目。形成表格之间的这种关系,在原始表格中可以节省大量空间

我建议你仔细阅读有关冗余和正常化的内容


希望它能解决您的问题。

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

以下是文件:

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

这里还指出了一些其他限制:

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

以下是文件:

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

这里还指出了一些其他限制:

请详细说明情况,并/或举个例子好吗?还有,你说的“在它下面”是什么意思?varchar字段中是否有重复的文本,或者该varchar中有许多具有相同内容的数据库条目吗?如果您发现相同的文本重复多次,那么为什么不通过创建第二个表来存储唯一值并使用外键约束来规范化架构?我宁愿不必只为这一个调用另一个column@user129013最小化数据存储始终需要额外的操作,无论是在应用程序逻辑上还是在DB逻辑内部。对于DB引擎来说,简单的内部连接/NATURL连接不是一个非常昂贵的操作。请详细说明这种情况,并/或给出一个示例?还有,你说的“在它下面”是什么意思?varchar字段中是否有重复的文本,或者该varchar中有许多具有相同内容的数据库条目吗?如果您发现相同的文本重复多次,那么为什么不通过创建第二个表来存储唯一值并使用外键约束来规范化架构?我宁愿不必只为这一个调用另一个column@user129013最小化数据存储始终需要额外的操作,无论是在应用程序逻辑上还是在DB逻辑内部。简单的内部连接/NATURL连接对于DB引擎来说不是一个非常昂贵的操作。另一个问题是添加值。这需要一个
altertable
,这是一个昂贵的操作,不应该成为常规程序流的一部分。另一个问题是添加值。这将需要一个
ALTER TABLE
,这是一个昂贵的操作,不应该成为常规程序流的一部分。