【发布时间】:2019-09-29 21:35:02
【问题描述】:
this query中的背景信息。
Postgres 版本 10.10
我需要根据包含文件名的列 (varchar) 的唯一值对表进行分区,但我不知道该怎么做。 LIST 显然不起作用,但我看不到如何指定将为列的每个唯一值生成分区的 RANGE。
当你看到它时,无疑是非常明显的!
【问题讨论】:
标签: postgresql database-partitioning
this query中的背景信息。
Postgres 版本 10.10
我需要根据包含文件名的列 (varchar) 的唯一值对表进行分区,但我不知道该怎么做。 LIST 显然不起作用,但我看不到如何指定将为列的每个唯一值生成分区的 RANGE。
当你看到它时,无疑是非常明显的!
【问题讨论】:
标签: postgresql database-partitioning
我想我也可以回答一下,因为我自己一直在寻找一个。
我最终使用 LIST 将自己与 LIST 中的单个元素进行分区。它似乎提供了分区(在我的情况下是子分区)表的所有承诺功能。
但是,Postgres 似乎没有内置算法来使用分区列上的索引。即使在从主表的分区列上选择不同的值时,Postgres 也会对大多数 1 级和 2 级表进行 seq 扫描。对我来说,这是非常愚蠢的,因为分区 LIST 是预先知道的,所以它所要做的就是从这个 LIST 中获取所有值并在默认分区上进行 seq 扫描(如果它存在的话)......
【讨论】:
列表分区是正确的。如果这似乎不可行,您可能根本不应该按该列对表进行分区。
如果您想要良好的性能,您不应该以数千个分区结束。如果您无法枚举文件名,那么您的文件名似乎太多了。
您必须回答的第一个问题是,您的查询或(最重要的)您的DELETE 语句是否会通过分区变得更快。如果没有,请不要这样做。
【讨论】: