我想创建一个基表,如下所示:
CREATE TABLE IF NOT EXISTS basetable
(
id BIGSERIAL NOT NULL PRIMARY KEY,
createdon TIMESTAMP NOT NULL DEFAULT(NOW()),
updatedon TIMESTAMP NULL
);
然后所有其他表都将继承此表。所以这个表包含所有记录的ID。是否存在超过200亿条记录的性能问题(分布在~10个表中)。
答案 0 :(得分:0)
有一个表"所有其他表将继承"听起来像一个奇怪的想法,但你可能有一个我们不清楚的用例。
特别是关于你的问题,拥有20B行会起作用,但正如@Gordon提到的那样,你将面临性能挑战。如果按ID查询行,它将完全正常,但如果按时间戳范围搜索行,即使使用索引,也会更慢(速度将取决于服务器的速度)。
对于大型表,一个好的解决方案是使用表分区(参见https://wiki.postgresql.org/wiki/Table_partitioning)。根据您在WHERE
子句(id
,createdon
或updatedon
)中查询最多的内容,您可以为该列创建分区,PostgreSQL将只能读取需要分区而不是整个表。