从一个basetable继承?好主意?

时间:2017-03-13 11:11:09

标签: sql postgresql

我想创建一个基表,如下所示:

CREATE TABLE IF NOT EXISTS basetable
(
    id              BIGSERIAL       NOT NULL    PRIMARY KEY,
    createdon       TIMESTAMP       NOT NULL DEFAULT(NOW()),
    updatedon       TIMESTAMP       NULL
);

然后所有其他表都将继承此表。所以这个表包含所有记录的ID。是否存在超过200亿条记录的性能问题(分布在~10个表中)。

1 个答案:

答案 0 :(得分:0)

有一个表"所有其他表将继承"听起来像一个奇怪的想法,但你可能有一个我们不清楚的用例。

特别是关于你的问题,拥有20B行会起作用,但正如@Gordon提到的那样,你将面临性能挑战。如果按ID查询行,它将完全正常,但如果按时间戳范围搜索行,即使使用索引,也会更慢(速度将取决于服务器的速度)。

对于大型表,一个好的解决方案是使用表分区(参见https://wiki.postgresql.org/wiki/Table_partitioning)。根据您在WHERE子句(idcreatedonupdatedon)中查询最多的内容,您可以为该列创建分区,PostgreSQL将只能读取需要分区而不是整个表。