postgresql - 调整慢速分组函数 Invantive SQL

标签 postgresql performance invantive-sql

我在 PostgreSQL 上有一个数据库,其中包含一些非常大的表(包含事件和事件度量)。对于测量的日期范围和一种事件类型,我想使用 Invantive SQL 计算平均持续时间。

事件(简化后,大约 5 GB):

  • 编号
  • 类型代码

event_measurements,大约 50 GB:

  • 事件编号
  • 开始
  • 结束

当我运行类似

的查询时
select avg(ended - started) 
from events 
   join event_measurements on events.id = event_measurements.event_id 
where events.type_code = '...'

它会运行数小时,消耗 GB 的内存。

需要的索引都已经到位,包括外键索引。

从 session I/O 中,我看到 Invantive SQL 首先下载详细信息并在客户端执行分组。这对于小卷来说很好,但在这种情况下,我希望有更多的 native 性能,比如这样的查询需要 5 分钟。

周围的查询需要 Invantive SQL,因此不能在数据库上“强制使用 native SQL”开关。

如何在不切换到“强制原生 SQL”的情况下提高此查询的性能?

最佳答案

除了按照@GordonLinoff 的建议创建 View ,您还可以使用:

  • local log on 在各个语句之间切换连接,以及
  • 插入 nativeplatformrequests(payload_text) 值 ('select avg...') 以绕过 Invantive SQL。这就像 Oracle 上的 EXECUTE IMMEDIATE

关于postgresql - 调整慢速分组函数 Invantive SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46155039/

相关文章:

Invantive Control for Excel 中的 SQL 错误

exact-online - “使用选择”符号指定 Exact Online 数据容器的多个分区

postgresql - 比 HDF5 -> Pandas -> PostgreSQL 更好的方法

javascript - 数组过滤和对象转换: what is fastest and what other considerations matter?

SQL - 联系人、公司数据库设计

c - 从文件 (CSV) c 中高效读取和复制数据/字符串

php - 关于在 php 脚本中释放内存的问题

exact-online - 如何通过 SalesInvoicesExploded 优化 SerialNumbers 的性能?

ruby-on-rails - 添加新列时如何避免 PG::InFailedSqlTransaction?

ms-access - 如何在 PostgreSQL/Access 组合中使用序列号/自动编号