加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在PostgreSQL中计算和节省空间

发布时间:2020-12-13 16:47:55 所属栏目:百科 来源:网络整理
导读:我有一个表在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,--
我有一个表在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字节。我将在表中有许多行,可能上升145亿行,因此表将推动13-14太字节。如果有的话,我可以使用什么技巧来压缩这张表?我可能的想法下面…

将实数值转换为整数。如果它们可以存储为smallint,那就是每个字段节省2个字节。

将列b .. m转换为数组。我不需要搜索这些列,但我需要能够一次返回一列的值。所以,如果我需要列g,我可以做类似的

SELECT a,arr[5] FROM t;

我可以用数组选项保存空间吗?会有速度惩罚吗?

任何其他想法?

我在数组中存储几个数字字段时没有看到任何东西(和要丢失的东西)。

size of each numerical type清楚地记录下来,你应该简单地使用与你想要的范围分辨率兼容的最小尺寸的类型;这就是所有你能做的。

我不认为(但我不知道)如果有一些行的字段对齐要求,在这种情况下,列的重新排序可能会改变所使用的空间 – 但我不这么认为。

BTW,每行有一个固定开销,大约是23 bytes。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读