我有一个大型的(> 100M行)Postgres表,其结构为{整数,整数,整数,没有时区的时间戳记}。我期望行的大小为3 *整数+ 1 *时间戳= 3 * 4 + 1 * 8 = 20字节。实际上,行大小为pg_relation_size(tbl) / count(*)= 52个字节。为什么?(不删除表:pg_relation_size(tbl, 'fsm')〜= 0)
3 回答
扬帆大鱼
TA贡献1799条经验 获得超9个赞
每行都有与之关联的元数据。正确的公式是(假定为简单对齐):
3 * 4 + 1 * 8 == your data
24 bytes == row overhead
total size per row: 23 + 20
或大约53个字节。实际上,我专门写了postgresql-varint来帮助解决这个确切的用例问题。您可能想看一看类似的文章,了解有关re:元组开销的更多详细信息。
慕妹3146593
TA贡献1820条经验 获得超9个赞
RAM中的数据表示甚至需要更多空间。所以不,那里没有压缩。如果您有较长的字符串,它们将被压缩并可能被“烘烤”。有关更多信息,请TOAST参见此处的手册。因此,非常小的元组有相当大的开销。尽管如此,对表的操作通常还是非常快的,所以不要陷入过早地对表进行非规范化的诱惑。如有疑问,请运行性能测试
添加回答
举报
0/150
提交
取消