Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
引用分区表时PostgreSQL中的分区_Postgresql_Partitioning_Database Partitioning - Fatal编程技术网

引用分区表时PostgreSQL中的分区

引用分区表时PostgreSQL中的分区,postgresql,partitioning,database-partitioning,Postgresql,Partitioning,Database Partitioning,我的PostgreSQL数据库有一个包含实体的表,实体可以是活动的,也可以是非活动的——它由isActive列值决定。非活动实体很少被访问,并且随着数据库的增长,“非活动到活动”的比率对于数据库来说变得非常高。因此,我希望基于简单isActive检查的分区能够带来巨大的性能结果 问题是,该表由许多其他表的外键约束引用。如的“注意事项”部分的最后一个项目符号所述,对于这种情况没有很好的解决方法 那么,当前PostgreSQL中的分区是否只适用于被分区的表不从任何地方引用的简单情况? 有没有其他方法

我的PostgreSQL数据库有一个包含实体的表,实体可以是活动的,也可以是非活动的——它由isActive列值决定。非活动实体很少被访问,并且随着数据库的增长,“非活动到活动”的比率对于数据库来说变得非常高。因此,我希望基于简单isActive检查的分区能够带来巨大的性能结果

问题是,该表由许多其他表的外键约束引用。如的“注意事项”部分的最后一个项目符号所述,对于这种情况没有很好的解决方法

那么,当前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)
);

在这种情况下,我希望对
资源
表进行分区。

如果非活动与活动的比率非常高,则部分索引是一个不错的选择

create index index_name on resources (isActive) where isActive = 1

如果非活动与活动比率非常高部分指数是一个不错的选择

create index index_name on resources (isActive) where isActive = 1

如果非活动与活动比率非常高部分指数是一个不错的选择

create index index_name on resources (isActive) where isActive = 1

如果非活动与活动比率非常高部分指数是一个不错的选择

create index index_name on resources (isActive) where isActive = 1
为具有多个子表的表创建外键的唯一已知解决方法(我可以想到)是创建另一个表以仅保存主键(但所有主键都由触发器维护),并将所有外键引用指向它

比如:

+-------------++-------------++---------------------+
|资源| |资源| | |资源|部分||
+===========+ 0 1 +================+ 1 0 +=====================+
|id |-->id |为具有多个子表的表创建外键的唯一已知解决方法(我可以想到)是创建另一个表以仅保存主键(但所有主键都由触发器维护)并将所有外键引用指向它

比如:

+-------------++-------------++---------------------+
|资源| |资源| | |资源|部分||
+===========+ 0 1 +================+ 1 0 +=====================+
|id |-->id |为具有多个子表的表创建外键的唯一已知解决方法(我可以想到)是创建另一个表以仅保存主键(但所有主键都由触发器维护)并将所有外键引用指向它

比如:

+-------------++-------------++---------------------+
|资源| |资源| | |资源|部分||
+===========+ 0 1 +================+ 1 0 +=====================+
|id |-->id |为具有多个子表的表创建外键的唯一已知解决方法(我可以想到)是创建另一个表以仅保存主键(但所有主键都由触发器维护)并将所有外键引用指向它

比如:

+-------------++-------------++---------------------+
|资源| |资源| | |资源|部分||
+===========+ 0 1 +================+ 1 0 +=====================+

|id |-->| id |与更明智地使用标记相比,您确定需要分区吗?您是否进行了预优化?您几乎可以获得分区或外键关系。是的,这很糟糕,但它不是超级容易修复的,而且没有人资助它的工作……与更明智地使用指示符相比,你确定需要分区吗?您是否进行了预优化?您几乎可以获得分区或外键关系。是的,这很糟糕,但它不是超级容易修复的,而且没有人资助它的工作……与更明智地使用指示符相比,你确定需要分区吗?您是否进行了预优化?您几乎可以获得分区或外键关系。是的,这很糟糕,但它不是超级容易修复的,而且没有人资助它的工作……与更明智地使用指示符相比,你确定需要分区吗?您是否进行了预优化?您几乎可以获得分区或外键关系。是的,这很糟糕,但它不是超级容易修复,而且没有人资助它的工作。。。