【发布时间】:2015-12-02 11:08:50
【问题描述】:
我的 SQL 查询存在性能问题:(在 Oracle SQL 上)
Data:
- step:number
- processid:number
- Status:number
- process_planed:number
- id:primary
- ... and many more
专用于特定 processid (4711) 的所有行的结果:
step |processid |Status |Process_planned |....
---------------------------------------------------
10 |4711 |30 | 75 |....
20 |4711 |50 | 81 |....
30 |4711 |10 | 81 |....
40 |4711 |10 | 36 |....
50 |4711 |10 | 25 |....
我的数据库中充满了此类数据。问题是,步长值不是固定的。也可以是:
260,310,570,600 ...
现在我想获取 process_planned = 75 和 Status = 10 的每个数据,但我只想要这些进程,它们的第一个条目(在上面的步骤 10 中的示例)等于 10。我的解决方案如下:
- 1 个查询,用于获取 process_planned = 75 和不同 processid 的所有行
- 现在我有所有涉及到 process_id = 75 的进程
- 然后我为每个 process_id 做一个子查询,它检查第一步是否与 process_planned = 75 以及 Status = 10 相关
- 然后我将这个单一数据写入一个数组。
现在的问题是我的解决方案缺乏性能!例如40 个 processid,每 6 个步骤我对我的解决方案执行 241 个查询!必须有更简单的方法来做到这一点。
但我不知道,如果步骤被修复会很容易,那么只需添加 where step = 10 即可获得最初的步骤。
你有什么想法吗?
【问题讨论】:
标签: oracle11g query-performance