1

我在 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”的情况下提高此查询的性能?

4

1 回答 1

0

除了按照@GordonLinoff 的建议创建视图之外,您还可以使用:

  • local log on切换各个语句之间的连接,以及
  • insert into nativeplatformrequests(payload_text) values ( 'select avg...')绕过 Invantive SQL。就像EXECUTE IMMEDIATE在 Oracle 上一样。
于 2017-09-11T18:38:59.937 回答