我想按日期范围对 100 万行以上的表进行分区。这通常是如何在不需要大量停机时间或冒丢失数据的风险的情况下完成的?以下是我正在考虑的策略,但欢迎提出建议:
现有的表是主表,子表是从它继承而来的。随着时间的推移,将数据从主表移动到子表,但会有一段时间,其中一些数据在主表中,一些在子表中。
创建一个新的主表和子表。在子表中创建现有表中的数据副本(因此数据将驻留在两个位置)。一旦子表拥有最新数据,更改所有插入以指向新的主表并删除现有表。
我正在通过 Heroku 使用 Postgres 9.3。
我有一个表,“交通”,有 100 万条记录,每天都有很多插入和更新。我需要在不同的时间范围内跨该表执行 SUM 运算,这些调用最多可能需要 40 秒,我很想听听有关如何改进它的建议。
我在这张桌子上有以下索引:
CREATE INDEX idx_traffic_partner_only ON traffic (dt_created) WHERE campaign_id IS NULL AND uuid_self <> uuid_partner;
Run Code Online (Sandbox Code Playgroud)
这是一个示例 SELECT 语句:
SELECT SUM("clicks") AS clicks, SUM("impressions") AS impressions
FROM "traffic"
WHERE "uuid_self" != "uuid_partner"
AND "campaign_id" is NULL
AND "dt_created" >= 'Sun, 29 Mar 2015 00:00:00 +0000'
AND "dt_created" <= 'Mon, 27 Apr 2015 23:59:59 +0000'
Run Code Online (Sandbox Code Playgroud)
这是解释分析:
Aggregate (cost=21625.91..21625.92 rows=1 width=16) (actual time=41804.754..41804.754 rows=1 loops=1)
-> Index Scan using idx_traffic_partner_only on …Run Code Online (Sandbox Code Playgroud) postgresql performance index optimization postgresql-9.3 postgresql-performance
我有一张包含 100 万条记录的表格。每次针对每种类型的事件(有很多)发生事件时,每天都会创建和更新新记录。我经常需要在许多记录中找到总和,并且执行这些查询的时间逐渐变慢,即使在某些地方有多个索引。由于现在存储了几年的数据,我正在考虑将超过 6 个月的记录迁移到单独的“存档”表,并为每个事件类型创建新记录,其中包括每月聚合(即行的总和)在 2014 年 1 月存储的 31 条记录中,将存储在 1 条记录中)。这有望提高搜索速度,但有更好的策略吗?这种归档方式常见吗?
postgresql optimization compression archive query-performance
optimization ×3
postgresql ×3
archive ×1
compression ×1
index ×1
partitioning ×1
performance ×1