我在 PostgreSQL 上有一个数据库,其中包含一些非常大的表(带有事件和事件测量)。对于测量的日期范围和一种事件类型,我想使用 Invantive SQL 计算平均持续时间。
事件(简化,大约 5 GB):
- ID
- 类型代码
event_measurements,大约 50 GB:
- event_id
- 开始
- 结束了
当我运行类似的查询时
select avg(ended - started)
from events
join event_measurements on events.id = event_measurements.event_id
where events.type_code = '...'
它运行数小时消耗 GB 的内部存储器。
必要的索引都到位了,包括外键索引。
从会话 I/O 中,我看到 Invantive SQL 首先下载详细信息并在客户端上执行分组。这对小容量来说很好,但在这种情况下,我希望这样的查询有更多的本地性能,比如 5 分钟。
周围的查询需要 Invantive SQL,因此不能选择打开数据库的“强制原生 SQL”。
如何在不切换到“强制本机 SQL”的情况下提高此查询的性能?