Xod*_*rap 9 postgresql performance database-design datatypes array
我有一个包含五个布尔列的表。在 90% 以上的行中,所有列都为空。(False
相当于null
我。)
我可以有一个包含枚举自定义数据类型数组的单个数组列,而不是具有布尔列,从而仅存储非空的列。
我觉得使用数组很奇怪,但我的同事向我指出,并没有真正强烈的理由反对使用它们,而且我们实际上可能会看到使用它们的节省,因为我们没有存储一堆空列。
使用数组有什么缺点吗?具体来说:它们会占用更多空间,占用更多时间进行查询,还是阻止使用 Postgres 功能(例如 gin 索引)?
TL; DR:做不使用数组。使用单独的boolean
列。
您的同事可能不知道实际的存储要求。空存储在 Postgres 中非常便宜且高效。
几boolean
列也非常便宜和高效——无论是否可以为空。实际上,只有 5boolean
列对于行大小几乎没有影响 - 即使定义了NOT NULL
. 每个 1 个字节,5 个字节,没有对齐限制。几乎不相关。通常,您可以对您的行做更多实质性的事情。(您应该已经提供了实际的表定义。)
数组的开销为24 字节。加上实际数据。而且处理起来不那么方便,而且更贵:
此相关答案对三个相关选项进行了详细评估:
boolean
列integer
编码多达 32 个布尔值bit(n)
或bit varying(n)
) 归档时间: |
|
查看次数: |
3606 次 |
最近记录: |