描述
我目前在涉及一个父表和 30 个子表的 PostgreSQL 数据库场景中面临性能挑战。值得注意的是,这些表都没有分区,并且一些子表的单个大小很大,所有表的累积大小达到 5TB。尽管父表和子表都有索引,但执行查询(如下所示)需要很长的时间,通常是几个小时。
问题
我正在寻求有关在这种情况下优化性能的指导。除了索引之外,是否有特定的配置可以显着提高如此庞大且复杂的数据库结构的查询速度?
此外,我很好奇 PostgreSQL 在有效处理这种大小和重量的数据库方面是否存在固有的局限性。如果是这样,是否可以考虑使用替代策略以获得更好的性能?
有人猜测 PostgreSQL 面临磁盘 I/O 的挑战,特别是与 Oracle 或 NoSQL 等其他数据库相比。这个猜测准确吗?
信息
版本
在 Google Cloud SQL 上运行
x86_64-pc-linux-gnu 上的 PostgreSQL 13.12,由 Debian clang 版本 12.0.1 编译,64 位
桌子
CREATE TABLE mytable (
id_pos int8 NOT NULL PRIMARY KEY,
date_insert DATE DEFAULT NOW()
);
CREATE TABLE mytable_child1 (
id_pos int8 NOT NULL PRIMARY KEY,
date_insert DATE DEFAULT NOW(),
other_field varchar(10) NOT NULL
) INHERITS (mytable);
索引
在每个表(父表和子表)上我都有这个索引
CREATE INDEX IF NOT EXISTS mytable_date_insert_idx ON mytable USING btree (date_insert);
CREATE INDEX IF NOT EXISTS mytable_child1_date_insert_idx ON mytable_child1 USING btree (date_insert);
询问
SELECT * FROM mytable WHERE date_insert >= CURRENT_DATE - INTERVAL 1 MONTH;