数据库如何处理冗余值?

How do databases handle redundant values?

假设我有一个包含多个列的数据库。在每一列中,有很多值通常是相似的。

例如,我可以有一个名称为 "Description" 的列,值可以是 "This is the description for the measurement"。此描述在此列中最多可出现 1000000 次。

我的问题不是如何优化这个数据库的设计,而是数据库如何处理这些冗余值。这些冗余值的存储是否与完美设计一样有效(相对于数据库的总大小)?如果是这样,这些值是如何压缩的?

唯一正确的答案是:取决于数据库和配置。因为这个没有灵丹妙药。一些数据库只存储每列的值一次(一些列存储等),但从技术上讲,没有必要这样做或不这样做。

在某些数据库中,您可以让 DBMS 提出优化建议,在这种情况下,它可能会提出一个仅包含现有值的 ENUM 字段,这会将字符串缩减为引用该字符串的 ID。这 "optimization" 是有代价的,例如,当您想在字段描述中添加新值时,您必须调整 ENUM 字段。

根据实际用例,这些优化毫无价值,甚至是阻碍,例如,当数据经常更改(插入或更新)时。与实际处理查询相比,DBMS 管理 uniqueness/duplicates 的时间会更多。

关于压缩的问题:我猜也取决于配置和数据库系统,也取决于字段类型。文本数据可以压缩,在非索引文本字段的情况下,使用简单的压缩算法应该几乎没有缺点。我怀疑哪种算法取决于 dbms 和配置。

除非你变得更具体,否则没有更具体的答案,我相信。