【问题标题】:postgres: Partitioned tables: split on unique valuespostgres:分区表:按唯一值拆分
【发布时间】:2019-09-29 21:35:02
【问题描述】:

this query中的背景信息。

Postgres 版本 10.10

我需要根据包含文件名的列 (varchar) 的唯一值对表进行分区,但我不知道该怎么做。 LIST 显然不起作用,但我看不到如何指定将为列的每个唯一值生成分区的 RANGE。

当你看到它时,无疑是非常明显的!

【问题讨论】:

    标签: postgresql database-partitioning


    【解决方案1】:

    我想我也可以回答一下,因为我自己一直在寻找一个。

    我最终使用 LIST 将自己与 LIST 中的单个元素进行分区。它似乎提供了分区(在我的情况下是子分区)表的所有承诺功能。

    但是,Postgres 似乎没有内置算法来使用分区列上的索引。即使在从主表的分区列上选择不同的值时,Postgres 也会对大多数 1 级和 2 级表进行 seq 扫描。对我来说,这是非常愚蠢的,因为分区 LIST 是预先知道的,所以它所要做的就是从这个 LIST 中获取所有值并在默认分区上进行 seq 扫描(如果它存在的话)......

    【讨论】:

      【解决方案2】:

      列表分区是正确的。如果这似乎不可行,您可能根本不应该按该列对表进行分区。

      如果您想要良好的性能,您不应该以数千个分区结束。如果您无法枚举文件名,那么您的文件名似乎太多了。

      您必须回答的第一个问题是,您的查询或(最重要的)您的DELETE 语句是否会通过分区变得更快。如果没有,请不要这样做。

      【讨论】:

        猜你喜欢
        • 2020-01-15
        • 1970-01-01
        • 2020-10-01
        • 2013-07-08
        • 1970-01-01
        • 2022-07-15
        • 2016-01-17
        • 1970-01-01
        • 2022-11-23
        相关资源
        最近更新 更多