首页 > 解决方案 > Postgres 表分区列表限制

问题描述

我想知道每个子分区表仅包含一个元素的列表分区表是否存在限制。

例如,我有这个分区表:

CREATE TABLE whatever (
    city_id         int not null,
    country_id      int not null,
) PARTITION BY LIST (country_id);

我创建了数百万个子分区表:

CREATE TABLE whatever_1 PARTITION OF whatever
    FOR VALUES IN (1);

CREATE TABLE whatever_2 PARTITION OF whatever
    FOR VALUES IN (2);

# until millions...

CREATE TABLE whatever_10000000 PARTITION OF whatever
    FOR VALUES IN (10000000);

假设在 上的索引country_id,那仍然有效吗?或者我会达到这里描述的 65000 限制

标签: postgresqlddldatabase-partitioning

解决方案


即使使用 PostgreSQL v13,超过几千个分区的任何东西都无法正常工作,最好保持较低。

原因是当您在 SQL 语句中使用分区表时,优化器必须单独考虑所有分区。它必须弄清楚它必须使用哪些分区,哪些不使用,并且对于它使用的所有分区,它必须提出一个执行计划。因此,规划时间将随着分区数量的增加而增加。这对于执行时间占主导地位的大型分析查询可能无关紧要,但它会大大减慢小语句的执行速度。

使用更长的列表或使用范围分区。


推荐阅读