sql - Postgresql 13 中大型数据集的滚动统计
问题描述
我在 Postgresql 13 中有一个简单的表,其结构如下(简化视图):
姓名 | 类型 |
---|---|
地点 | 细绳 |
压力 | 数字 |
时间 | 没有时区的时间戳 |
它基本上可以捕获一些气象信息,例如大约 2000 个不同位置的气压。分钟间隔。为了计算移动统计数据,例如平均值、每个位置和超过 30 分钟的滚动时间窗口,我使用以下 SQL:
SELECT t1.location,t1.time, avg(t2.pressure)
FROM meteomeasures as t1
inner join meteomeasures as t2
on t2.time + interval '30 minutes' > t1.time and
t1.location = t2.location
group by t1.location, t1.time
我也有关于位置、时间和压力的索引。我需要处理的完整数据集大约有 1.4 亿行,所以它相当大。即使在只有大约的测试数据集上。800 万行,上述查询在可用硬件上需要近 2 小时才能完成。在不采取更多涉及和成本更高的措施、需要硬件升级和/或分布式数据库架构的情况下,是否有一种方法可以提高性能并允许在无需等待 25 小时或更长时间的情况下获得完整数据集的相同输出?
解决方案
推荐阅读
- docker - Docker 容器始终处于退出状态
- javascript - 如何将鼠标事件调用到 javascript 中位于其他对象后面的 dom 对象?
- php - 如何在 Symphony 旧版本中从控制器方法创建手动登录
- android - 带有adjustViewBounds的ImageView在通货膨胀时不一致地显示在ConstraintLayout中
- python - Pyspark - 在 zip 文件中导入模块时出错
- java - Java 8 流 - 通过比较两个列表进行过滤
- python - 将 3D numpy 数组拆分为更小的 3D 数组
- ios - 应用程序图标上的快捷方式项不适用于 iOS 13
- javascript - 如何在呈现不同结果的forEach中修复正则表达式
- python - Django Admin - 第一行中的自定义列未正确呈现