您是否需要在分区表(PostgreSQL 11)上添加索引?

3

我的团队正在考虑将大约1TB数据的非分区表转移到分区表。

我们将使用基于时间戳列的范围分区。

有一件事我不明白,如果时间戳列被用作分区键,我们是否需要在其上添加索引。如果我们将分区设置得很小(例如每天分区),这是否会起到类似于索引的作用?

我们只会在最多每天的最高分辨率上进行查询。

我不太想添加索引,因为我们之前尝试过,但从未完成过(可能是因为我们没有关闭写入。无法关闭写入一个扩展的时期)。

1个回答

3

你的感觉是正确的:在分区列上省略索引是分区实际上能使查询更快的少数几个地方之一。

然后,您可以轻松进行单个分区的顺序扫描,并且您不必在每个数据修改语句中维护索引。

另一个优点是,分区使得大规模删除数据(沿分区边界)更加高效。最后,自动清理作业会变得更容易。

关于分区的两点:

  • 升级到v12;有关分区的性能改进非常大。

  • 不要使用太多分区。在v12中,您可能可以增加到几千个,在早期版本中,您将更早遇到性能问题。


谢谢。此外,在PostgreSQL文档中还发现了以下内容:请注意,分区剪枝仅由分区键隐含定义的约束驱动,而不是索引的存在。因此,在关键列上定义索引并不是必需的。是否需要为给定分区创建索引取决于您是否希望扫描分区的查询通常会扫描大部分分区还是只扫描小部分分区。在后一种情况下,索引将有所帮助,但在前一种情况下则没有。 - jeznag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接