我的 PostgreSQL 数据库有一个包含事件和非事件实体的表 - 它由 isActive 列值决定。非事件实体很少被访问,并且随着数据库的增长,数据库的“非事件到事件”率变得非常高。所以我希望基于简单的 isActive 检查的分区能够带来巨大的性能结果。
问题是,该表被许多其他表的外键约束所引用。正如 PostgreSQL Inheritance doc 的警告部分的最后一个项目符号中指定的那样,对于这种情况没有好的解决方法。
那么,目前PostgreSQL中的分区是否真的只适用于分区表没有被任何地方引用的简单情况? 还有其他方法可以优化对我上面描述的表的查询性能吗?我很确定我的用例很常见,应该有好的解决方案。
创建表的查询示例:
CREATE TABLE resources
(
id uuid NOT NULL,
isActive integer NOT NULL, -- 0 means false, anything else is true, I intentionally do not use boolean type
PRIMARY KEY (id)
);
CREATE TABLE resource_attributes
(
id uuid NOT NULL,
resourceId uuid NOT NULL,
name character varying(128) NOT NULL,
value character varying(1024) DEFAULT NULL,
PRIMARY KEY (id),
CONSTRAINT fk_resource_attributes_resourceid_resources_id FOREIGN KEY (resourceId) REFERENCES resources (id)
);
在这种情况下,我想对 resources
表进行分区。
最佳答案
如果不活跃与活跃的比率非常高,部分索引是一个不错的选择
create index index_name on resources (isActive) where isActive = 1
关于postgresql - 引用分区表时在 PostgreSQL 中进行分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22834510/