在PostgreSQL中使用几个子进程的继承可能会降低性能?

时间:2011-12-07 23:41:03

标签: performance postgresql inheritance database-schema

我有一个由几个表继承的日志表:

CREATE TABLE log (
    IdGlobal uuid NOT NULL DEFAULT uuid_generate_v1(),
    Version integer NOT NULL DEFAULT 0,
    ChangeDate TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
    IsDeleted bool DEFAULT false
);

CREATE TABLE Customer (
    Id SERIAL PRIMARY KEY,
    Code text NOT NULL UNIQUE,
    Name text NOT NULL,
) INHERITS (log);

然而,我想知道它是否会对性能产生影响。该数据库适用于开发中的SASS应用程序(早期阶段),将有1个schema = 1公司。

据我所知,postgres的主要优点是分区,但我的用例与典型的OOP更相关。

从长远来看,日志表增加大小会伤害我吗?我把索引放在哪里?在父母或孩子的? (我将通过IdGlobal& version进行搜索)

1 个答案:

答案 0 :(得分:0)

日志表大小不会影响对Customer表的查询,实际上是另一种方式:默认情况下,日志表中的SELECT,UPDATE和DELETE也将针对Customer表运行,除非您指定ONLY子句,即 SELECT * FROM ONLY log;

索引和约束(唯一,主键和外键)仅适用于单个表,而不适用于整个继承层次结构,因此,不幸的是,您需要为父表和子表单独创建它们。这也意味着您不能拥有覆盖层次结构中所有表的唯一索引。