postgresql - 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 限制吗?
解决方案
即使使用 PostgreSQL v13,超过几千个分区的任何东西都无法正常工作,最好保持较低。
原因是当您在 SQL 语句中使用分区表时,优化器必须单独考虑所有分区。它必须弄清楚它必须使用哪些分区,哪些不使用,并且对于它使用的所有分区,它必须提出一个执行计划。因此,规划时间将随着分区数量的增加而增加。这对于执行时间占主导地位的大型分析查询可能无关紧要,但它会大大减慢小语句的执行速度。
使用更长的列表或使用范围分区。
推荐阅读
- python - 接受 1 个位置参数,但给出了 2 个;组合字符串作为参数
- typescript - 如何使用打字稿键入 Vue.component?
- javascript - 例如,如何创建像字符串这样的对象?具有许多属性和默认 console.log/evaluation 值的对象
- javascript - 静态方法不起作用
- python - 从 Pandas 列解析最后一个数字序列以创建新列
- sql - 如何防止我的 SQL 子查询在 PostgreSQL 中缓存数据?
- java - Spring 忽略 application.properties 中的 Mongo 设置
- assembly - BIOS INT 13H 问题(从驱动器读取扇区)
- airflow - 强制运行 ShortCircuitOperator 跳过的任务
- python - 创建具有多列索引的 Pandas 数据框