【发布时间】:2021-03-15 18:05:19
【问题描述】:
我想知道按列表分区表是否有限制,每个子分区表只包含一个元素。
比如我有这个分区表:
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 上有一个索引,这仍然有效吗?
或者我会达到here 所述的 65000 限制吗?
【问题讨论】:
-
"Millions of partitions" 从一开始就不太明智。您想通过该分区方案实现什么目标?你在哪个宇宙建模,你有 数百万 个国家?地球目前有大约 200 个国家。
-
这只是一个例子。不用管这个
-
阅读您的描述,您似乎正在使用 country_id 的序列,然后认为您需要一个用于序列值的分区。除了基本上是一个坏主意之外,它也是不正确的。使用ISO 3166 标准代替任意分配的值。在这种情况下,只需加载整个国家列表。列出了几个候选键,也许最适合这里是 ISO 1366-1 数字代码。然后根据给你 249 个分区而不是 百万 创建你的分区。
-
Country 就是一个例子……我在现实生活中没有使用 country。假设它可以只是一个 ID
-
为什么要分区?
country_id上的索引似乎是这里更好的选择。
标签: postgresql ddl database-partitioning