分区 Postgres 表
Posted
技术标签:
【中文标题】分区 Postgres 表【英文标题】:Partitioning Postgres table 【发布时间】:2019-07-14 03:16:11 【问题描述】:我正在 Postgres 11 中构建一个数据库,我想通过分区表来分割信息。约会表已经按日期范围进行了分区,我也想对患者表进行分区;每个医生对患者的分区。
问题是:如何使用列表分区对患者表进行分区?也就是说,对于这张表,我必须与医生表建立直接的分区关系,或者我必须使用中间表,因为这两个表之间存在多对多的关系。
附上一张说明图。
【问题讨论】:
"我还要对患者表进行分区;每个医生对患者的分区。"当同一个病人可以分配给多个医生时,这将如何工作?你想通过对表进行分区来实现什么? 您预计有多少患者和医生?如果表中只有几百万行,则不需要分区(也没有帮助) 【参考方案1】:对于多对多关系,您需要一个映射表,无论是否分区。
我不会为映射表使用人工主键,而是id_doctor
和id_patient
的组合(无论如何它们都是人工的)。 appointment
表也是如此。
由于id_doctor
不是患者表的一部分(也不应该是),因此您不能对每个医生的patient
表进行分区。你为什么想这么做?分区主要用于批量删除(并在一定程度上加速顺序扫描)——这就是你的目标吗?
有一个广泛的假设,即更大的表应该仅仅因为它们很大就被分区,但事实并非如此。对分区表的索引访问(如果有的话)比对非分区表的索引访问稍慢。您有数十亿患者吗?
【讨论】:
阅读我看到在这种情况下使用分区不方便的答案,@LaurenzAlbe 你能告诉我一个正确的方法来做多对多关系吗?谢谢! 我可以告诉你我认为什么是好的。例如在doctor_patient
中,删除id_doctor_patient
并改为在(id_doctor, id_patient)
上声明主键(或相反)。这样可以为您节省一列,并确保每个医患组合只能有一个条目。以上是关于分区 Postgres 表的主要内容,如果未能解决你的问题,请参考以下文章
Spring-JPA 可以与 Postgres 分区一起使用吗?