为PostgreSQL中的财务数据进行有效查询和分页的索引

时间:2014-02-08 17:13:16

标签: postgresql postgresql-9.2

我正在使用需要返回金融交易列表的API。这些记录保存在6个不同的表中,但都有3个共同字段:

transaction_id int NOT NULL, 
account_id bigint NOT NULL, 
created timestamptz NOT NULL

注意:可能实际上 在postgresql中很好地利用了表继承,但是没有这样做。

业务要求是将按created排序的1个列表中的给定account_id的所有事务按降​​序返回(类似于最后一笔交易位于顶部的在线银行页面)。最初,他们想要以50个记录为一组进行分页,但是我让他们在日期范围内进行分页(相信我可以在数据库中比使用偏移量和限制更有效率。)

我的目的是在每个表上创建一个索引,如下所示:

CREATE INDEX idx_table_1_account_created ON table_1(account_id, created desc);
ALTER TABLE table_1 CLUSTER ON idx_table_1_account_created;

然后最后创建一个视图,将6个表中的所有记录合并为一个列表,然后显然需要“使用6个表中的记录”来提出统一列表(按照正确的顺序) )。这个电话看起来像:

SELECT * FROM vw_all_transactions 
WHERE account_id = 12345678901234 
AND created >= '2014-01-01' AND created < '2014-02-01'
ORDER BY created desc;

我的问题与创建索引和群集方案有关。既然记录必须由视图使用,那么有没有理由将各个索引指定为创建的desc?在定期调用CLUSTER;

时,以这种方式排序会有任何处罚

我已经完成了一些谷歌搜索和阅读,但似乎无法找到任何能够解决这种聚类如何发挥作用的信息。

在Heroku上使用PostgreSQL 9.2。

0 个答案:

没有答案