从一个草案中继承?好主意



我想创建一个基础表:

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

然后所有其他表都将继承该表。因此,此表包含所有记录的ID。它是否变成了超过200亿张记录的性能问题(在〜10个表上分发)。

有一个表"所有其他表都将继承"的表听起来像是一个奇怪的主意,但是您可能有一个不清楚的用例。

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

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

最新更新