我正在使用需要返回金融交易列表的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。