Postgres:将旧记录迁移到单独的表并创建新的聚合记录是提高搜索速度的好策略吗?

Eva*_*eby 5 postgresql optimization compression archive query-performance

我有一张包含 100 万条记录的表格。每次针对每种类型的事件(有很多)发生事件时,每天都会创建和更新新记录。我经常需要在许多记录中找到总和,并且执行这些查询的时间逐渐变慢,即使在某些地方有多个索引。由于现在存储了几年的数据,我正在考虑将超过 6 个月的记录迁移到单独的“存档”表,并为每个事件类型创建新记录,其中包括每月聚合(即行的总和)在 2014 年 1 月存储的 31 条记录中,将存储在 1 条记录中)。这有望提高搜索速度,但有更好的策略吗?这种归档方式常见吗?

小智 2

最好使用分区,例如每月一张表。然后,您可以截断存档表,这是一个释放磁盘空间的即时操作,或者将它们移动到更便宜的设备上的表空间和/或将它们替换为聚合表中的聚合行。您的应用程序看到的表格通常是每月表格的并集视图。不过,您需要仔细的索引设计。

您还可以使用触发器实时计算滚动(累积)总和。另一方面,在同一个表上执行删除和更新不会减少数据库的磁盘大小,并且可能会影响性能。但如果这是一个问题取决于具体情况:写入/选择/更新/秒、行大小、驱动器硬件、索引、内存等。您没有提及任何具体情况。