我有一个像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太字节.我可以使用什么技巧来压缩这个表?我的可能想法如下......
将 …
我在C#中的枚举上使用了Flags,一切都很好但是在以下场景中想要在SQL中使用类似的东西:
我们想要返回属于列表或条件的用户列表,如下所示:
ConditionOne = 2
ConditionTwo = 4
ConditionThree = 8
Run Code Online (Sandbox Code Playgroud)
等等...
我们将为用户提供一些针对他们的条件,如下所示:
User1: 6 (conditions 1 and 2)
User2: 4 (condition 2)
User3: 14 (conditions 1, 2 and 3)
Run Code Online (Sandbox Code Playgroud)
等等...
我们希望能够进行查询,我们说所有用户都获得条件1,在这种情况下,即使他们还有其他条件,它也会返回用户1和3.
非常感谢任何见解,只在C#中使用Flags,而不是直接在Sql Server中使用.
我得到了一个大的(> 100M行)Postgres表,其结构为{integer,integer,integer,timestamp without time zone}.我期望一行的大小为3*整数+ 1*时间戳= 3*4 + 1*8 = 20字节.
实际上,行大小pg_relation_size(tbl) / count(*)
= 52字节.为什么?
(不对表进行删除:pg_relation_size(tbl, 'fsm')
〜= 0)
我有以下表格:
types | id | name
------+----+----------
1 | A
2 | B
4 | C
8 | D
16| E
32| F
Run Code Online (Sandbox Code Playgroud)
和
vendors | id | name | type
--------+----+----------+-----
1 | Alex | 2 //type B only
2 | Bob | 5 //A,C
3 | Cheryl | 32 //F
4 | David | 43 //F,D,A,B
5 | Ed | 15 //A,B,C,D
6 | Felix | 8 //D
7 | Gopal | 4 //C
8 | Herry | …
Run Code Online (Sandbox Code Playgroud) postgresql ×4
storage ×3
bigdata ×1
indexing ×1
null ×1
performance ×1
sql ×1
sql-server ×1
types ×1