空的smallint[]数组与PostgreSQL中单独表的存储大小

问题描述 投票:0回答:1

我有两个选择:

a) 将三个

smallint[]
(数组)属性添加到我的(主)表中,其中两个属性大部分时间为空/未使用,第三个属性将经常使用(从技术上讲,所有 3 个属性都可以在同一时间,但很少发生)。

b) 创建一个带有两个外键的新表:1 个 int-key (main) 和 1 个smallint-key 以及我需要的

smallint[]
数组。

我想在存储使用方面优化数据库,但在这方面几乎没有经验。

更容易实现的是空数组变体。快速测试空的smallint数组(相对于smallint数据类型)的大小让我不寒而栗:

根据 pgAdmin 4/postgres,它有 140 字节的差异(经验法则虚拟表测试结果),这意味着(如果为真)每个数据集/行有 280 字节的浪费。

这与 ChatGPT 声称的 24-32 字节相反。

postgresql storage
1个回答
0
投票

即便如此,了解哪些选项可能比其他选项稍有优势可能会很有趣,但需要回答更重要的问题。

解决方案的属性版本中的部分或大部分数组将为空(或填充相同的值)这一事实表明数据库规范化受到侵犯。

因此只有一种合理的解决方案:选项b)

非常感谢@Tim Roberts 和@JohnH 为我指明了正确的方向(以及他们的反馈)。

© www.soinside.com 2019 - 2024. All rights reserved.