为了账号安全,请及时绑定邮箱和手机立即绑定

PostgreSQL中的空间计算与节省

PostgreSQL中的空间计算与节省

慕桂英3389331 2019-06-25 14:41:56
PostgreSQL中的空间计算与节省我有一张这样的PG桌子:CREATE TABLE t (     a BIGSERIAL NOT NULL,               -- 8 b     b SMALLINT,                         -- 2 b     c SMALLINT,                         -- 2 b     d REAL,                             -- 4 b     e REAL,                             -- 4 b     f REAL,                             -- 4 b     g INTEGER,                          -- 4 b     h REAL,                             -- 4 b     i REAL,                             -- 4 b     j SMALLINT,                         -- 2 b     k INTEGER,                          -- 4 b     l INTEGER,                          -- 4 b     m REAL,                             -- 4 b     CONSTRAINT a_pkey PRIMARY KEY (a));上面的加起来相当于每一行50个字节。我的经验是,我需要另外40%到50%的系统开销,甚至没有任何用户创建的索引以上。所以,每一行大约有75个字节。我将在表中有很多行,可能超过1450亿行,所以这个表将推进13-14兆字节。如果有的话,我能用什么技巧来挤这张桌子呢?我下面可能的想法.。转换real值到integer..如果它们可以存储为smallint,即每个字段节省2个字节。转换列b。M变成一个数组。我不需要搜索这些列,但我确实需要能够一次返回一个列的值。所以,如果我需要列g,我可以这样做SELECT a, arr[5] FROM t;我会用数组选项节省空间吗?会有超速罚则吗?还有其他想法吗?
查看完整描述

3 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

在一个数组中存储几个数字字段时,我看不到什么可获得的(也没有什么可丢失的)。

这个每种数值类型的大小显然,您应该使用与所需的范围分辨率兼容的最小大小的类型;这就是您所能做的一切。

我不认为(但我不确定)一行列是否需要对字节进行对齐,在这种情况下,重新排序列可能会改变所使用的空间-但我不这么认为。

顺便说一下,每一行都有一个修复开销,大约23个字节.


查看完整回答
反对 回复 2019-06-25
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

留给用户似乎还是很奇怪的。在创建表之后,我会看到系统目录的混乱是很棘手的,但是如果重新排序是预先完成的话,这似乎并不是一个问题。要实现这一点,像存储参数这样的东西会有什么问题呢?与…有关的东西CREATE TABLE WITH column_reorder_ok这意味着“我不关心逻辑列顺序,所以不管您喜欢优化表,都要修改它”。或者,用你的术语来说,WITH column_tetris_ok. :)

查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 700 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信