我有一个像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太字节.我可以使用什么技巧来压缩这个表?我的可能想法如下......
将 …
假设我的表上有一列定义了以下内容:
"MyColumn" smallint NULL
Run Code Online (Sandbox Code Playgroud)
存储类似0,1或其他值的值应该需要2个字节(1).但是如果我将"MyColumn"设置为NULL,需要多少空间?它需要0个字节吗?
是否有一些额外需要的字节用于管理目的或每个列/行的此类事项?
(1)http://www.postgresql.org/docs/9.0/interactive/datatype-numeric.html
所以我有一个包含大型数据集的表,这个表有三列我想删除.
问题是:Postgres将如何处理它?
它会遍历每个条目还是只是更新映射信息而没有太多开销?ALTER TABLE在这种特殊情况下,我可以只使用或应该使用交换表吗?
并且,如果它有任何区别,则所有三列都具有固定长度(两个整数和一个数字).
如果已经有人问过我很抱歉,但谷歌找不到任何相关的问题/文章......
postgresql ddl database-design database-performance postgresql-9.2
我要将记录存储在一个包含2个字段的表中:
id - > 4个字符
password_hash - > 64个字符
我可以在Heroku上的5mb PostgreSQL中存储多少个像上面那样的记录?
PS:给定一个包含x列且长度为y的表 - 如何计算数据库中的空间?
我需要设计一些数据库表,但我不确定性能影响.在我的情况下,它更多地关于读取性能而不是保存数据.
情况
借助模式识别,我可以找到需要在postgresql数据库中保存多少某个对象的值.其他数量让我们说固定属性唯一的区别是需要保存相同类型的1,2或3个值.
目前,我有3个实体/表,它们的区别仅在于具有相同类型的1,2或3个不可空的属性.
例如:
EntityTestOne/TableOne {
... other (same) properties
String optionOne;
}
EntityTestTwo/TableTwo {
... other (same) properties
String optionOne;
String optionTwo;
}
EntityTestThree/TableThree {
... other (same) properties
String optionOne;
String optionTwo;
String optionThree;
}
Run Code Online (Sandbox Code Playgroud)
我希望生产中有数百万条记录,并且我正在考虑这种变体的性能影响以及可能的替代方案.
备择方案
我想到的其他选择:
例如:
EntityOption {
String value;
}
EntityTest {
... other (same) properties
List<EntityOption> options;
}
Run Code Online (Sandbox Code Playgroud)
由于我不是那么强大的数据库设计和使用hibernate我对这些方法的优缺点感兴趣,如果有更多的选择.我甚至想问一个问题,如果postgresql是正确的选择,或者是否应该考虑使用另一个(免费)数据库.
谢谢!
我试图了解列顺序如何最小化PostgreSQL中的表大小.
例:
CREATE TABLE test (
column_1 int
,column_2 int
,column_3 bigint
,column_4 bigint
,column_5 text
,column_6 text
,column_7 numeric(5,2)
,column_8 numeric(5,2)
,column_9 timestamp
,column_10 boolean
,column_11 boolean
);
INSERT INTO test
VALUES(1,1,1,1,'test','test_1',12,12,current_timestamp,true,false);
SELECT pg_column_size(test.*) FROM test;
pg_column_size
----------------
82
(1 row)
Run Code Online (Sandbox Code Playgroud)
元组大小:
元组头的23字节开销+ NULL位图的1字节,因此:
24 + 4 + 4 + 8 + 8 + 5 + 7 + 5 + 5 + 8 + 1 + 1 = 80但实际元组大小为82.
是否有2字节的额外开销?
我理解下面链接给出的例子:
在PostgreSQL中计算和节省空间
如果我们删除column_8 numeric(5,2)那么那么元组大小保持不变,即:82.
我重新排序表以最小化元组大小并给出80.
CREATE TABLE …Run Code Online (Sandbox Code Playgroud) 我在决定使用哪种方法时遇到了一些麻烦.
我有几个实体"类型",让我们称它们为A,B和C,它们共享一定数量的属性(大约10-15).我创建了一个名为ENTITIES的表,以及每个常用属性的列.
A,B,C也有一些(大部分)唯一属性(所有布尔值,可以是10到30左右).我不确定在对表建模时遵循的最佳方法是什么:
我倾向于使用3,但我想知道是否有更好的解决方案.
是的,再次填充因子.我花了很多时间阅读,我无法确定每个案例哪个是更好的填充因子.问题是我不明白何时以及如何进行碎片化.我正在将数据库从MS SQL Server迁移到PostgreSQL 9.2.
情况1)连续(连续)PK中10-50次插入/分钟,每小时20-50次读数.
CREATE TABLE dev_transactions
(
transaction_id serial NOT NULL,
transaction_type smallint NOT NULL,
moment timestamp without time zone NOT NULL,
gateway integer NOT NULL,
device integer NOT NULL,
controler smallint NOT NULL,
token integer,
et_mode character(1),
status smallint NOT NULL,
CONSTRAINT pk_dev_transactions PRIMARY KEY (transaction_id)
)
WITH (
OIDS=FALSE
);
Run Code Online (Sandbox Code Playgroud)
情况2)PK顺序的类似结构索引将以每个2个月~50,000个寄存器的块(一次)写入,读数为10-50 /分钟.
50%的填充因子意味着在每个插入中将生成一个新页面并将50%的现有记录传输到新的生成页面?
50%的填充因子意味着在创建新页面时,复制的记录将被保留以避免插入之间?
只有在没有空间分配记录时才会生成新页面?
你可以看到我很困惑; 我会很感激它的一些帮助 - 也许是一个关于PostgreSQL和索引填充因子的好链接.
我有一个有 60 列的表。其中 20 个是“NotEmpty”,6 个是“NotNull”。
我有空值和 Null 值(在我的情况下总是意味着“没有数据”)。我想将列与一种类型的约束统一起来。
我读过空值很便宜(以字节大小计)。那么也许使用 NotEmpty 约束?但也许 NotNull 约束表现更好?coalesce()或者也许在检索数据时同时拥有值和使用会更好?
Postgres 9.x 中的约束CHECK成本是多少?你的经历怎么样?有什么基准吗?INSERTUPDATE
sql postgresql benchmarking check-constraints postgresql-9.1