sql - Postgres 索引性能问题
问题描述
我有以下查询
explain analyze
select gdate,event_name,count(distinct device_id) as num
from (select gdate, event_name, device_id ,
row_number() over(partition by device_id,event_name
order by created_at) as row_no
FROM event_log
WHERE app_id = 'XXXXXX'
) as t
WHERE row_no = 1
GROUP BY gdate, event_name
ORDER BY gdate DESC
我创建了两个索引,如下所示。
CREATE INDEX gevent1 ON event_log USING btree (gdate DESC, event_name)
CREATE INDEX sortevent ON event_log USING btree (device_id, event_name, created_at)
但查询仅在计划中使用 sortevent 而不是 gevent1。
表记录:1465241
如何在这里提高性能?
解决方案
如果大部分时间都花在按日期排序上,请尝试以下操作:
CLUSTER event_log USING gevent1;
在 Postgres 上构建聚集索引,然后再次运行查询,看看它是否更快。
来源: https ://www.postgresql.org/docs/9.4/static/sql-cluster.html
推荐阅读
- python - Python从查询创建嵌套的html表
- javascript - admin.auth().currentUser; 在云函数中返回未定义
- css - CSS 通过“react-scripts build”命令破坏部署
- javascript - 在包含复杂嵌套数组的 javascript 对象中查找项目
- diameter-protocol - 直径最终单位指示 avp 可以通过 Gx 接口使用吗?
- android - 如何验证电子邮件地址的特定域?
- c++ - 同一图像中的反转文本和背景颜色
- javafx - 如何改进 MediaView 使其可以播放更多视频扩展 JavaFX
- python - .cumsum() 令人费解的效果
- python - 为什么“test”.count('') 返回 5?