【发布时间】:2018-07-24 02:17:15
【问题描述】:
我正在尝试优化以下每 50 秒运行一次的查询以提高性能。
select * from event se1
where id = (select min(id) from event se2 where
se1.sub_id=se2.sub_id and se2.state = 'PENDING' and se2.il_flag= true)
and not exists (select id from event se2 where se1.sub_id=se2.sub_id
and se2.state in ('ACCEPTED', 'FAILED', 'INPROCESS'))
关于提出更好的查询以提高其性能的任何方向? (postgres 9.6)。感谢帮助。
事件表
Id sub_id state idl_flag
1 23009 Pending true
2 23009 Accepted true
3 23009 Pending true
4 23009 Pending true
5 23010 Pending true
6 23010 Pending true
7 23011 Pending true
8 23012 Pending true
上表应该返回
5 23010 Pending true
7 23011 Pending true
【问题讨论】:
-
看看Oracle SQL Developer 这个工具,结合Oracle Docs 的数据库SQL 调优指南Query Optimizer Concepts 应该会给你一个好的开始。
-
@Rushikumar:Oracle 的调优指南如何帮助 Postgres?
-
我并不完全清楚你的陈述应该达到什么目的。您能否edit 提出您的问题并添加一些sample data 和基于该数据的预期输出。 Formatted text 请no screen shots.
-
@a_horse_with_no_name 好吧...有办法configure Oracle SQL Dev for PostgreSQL...和Oracel SQL Dev does support connection to PostgreSQL
-
没错,您可以使用 SQL Developer 连接到 Postgres 服务器。但这并不意味着调整查询的策略与 Oracle 相同。 Oracle 调优指南对 Postgres 几乎没用
标签: sql postgresql query-optimization greatest-n-per-group