首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于PostgreSQL的索引条件聚合查询

基于PostgreSQL的索引条件聚合查询
EN

Database Administration用户
提问于 2020-03-11 07:24:39
回答 2查看 258关注 0票数 1

如何优化PostgreSQL上的条件聚合查询?

这类查询的一个例子是:

代码语言:javascript
复制
SELECT SUM(score) FROM "games" WHERE "PlayerId" = 23 AND "status" = 'FINAL';

索引(PlayerId, status)将有助于过滤器,任何技巧或想法,以优化聚合后过滤?

理想的情况是不涉及外部缓存机制,以及每次更新“游戏”表时保持运行和的保存机制--类似于缓存的工作方式,但更可靠。

EN

回答 2

Database Administration用户

发布于 2020-03-11 07:52:24

您必须创建一个特殊的表来包含和。

然后在原始表上创建触发器,添加插入的值,减去已删除的值,对更新执行这两项操作,并在截断时将值设置为零。

您可以看到count聚合在我的博客文章中的一个很小的例子。与该示例不同的是,您必须有一个每个"PlayerId"status只有一个和的求和表。

票数 0
EN

Database Administration用户

发布于 2020-03-11 15:42:16

索引(PlayerId,status)将有助于过滤器,任何技巧或想法,以优化聚合后过滤?

是的,在("PlayerId", status,score)("PlayerId", score) WHERE status='FINAL'上建立索引。然后,可以从索引中检索和汇总分数,而无需访问表,只进行索引扫描。

要做到这一点,你可能不得不在桌子上保持安静,以保证大部分页面都是可见的。但是,如果表在密集地更新到位于随机位置的行,那么它甚至可能不可能足够频繁地真空。

这是最简单的,也是我的第一选择。如果不够好,则可以使用触发器实时维护汇总表,或者尝试使用分区将相关数据保持在磁盘上。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/261669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档