我有一个像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)
);
Run Code Online (Sandbox Code Playgroud)
以上每行最多可添加50个字节.我的经验是,我需要另外40%到50%的系统开销,甚至没有任何用户创建的索引.所以,每行约75个字节.我将在表中有许多行,可能超过1450亿行,因此该表将推动13-14太字节.我可以使用什么技巧来压缩这个表?我的可能想法如下......
将 …
PostgreSQL类型bytea和bit varying声音类似:
文档没有提到任何一个的最大大小.难道是1GB喜欢character varying?
我有两个单独的用例,都在一个包含数百万行的表中:
存储MD5哈希值
这将是一个bytea长度为16个字节或a bit(128).它将用于:
GROUP BY,我想有一个索引.WHERE md5 =仅查询完全匹配.存储任意二进制数据
长度不超过4kB的二进制数据字符串:
使用按位操作的工作示例bit varying.掩码是X'00FF00',它只返回行X'AAAAAA'.我缩短了示例的字符串,但它将超过它们的全长,高达4kB.是否可以做类似的事情bytea?
CREATE TABLE test1 (mystring bit varying);
INSERT INTO test1 VALUES (X'AAAAAA'), (X'ABCABC');
SELECT * FROM test1 WHERE mystring & X'00FF00' = X'00AA00';
Run Code Online (Sandbox Code Playgroud)
其中的bytea和bit varying是比较合适的?
我看到这个UUID类型正好存储了16个字节,那么存储MD5会有什么好处吗?