Sre*_*ree 5 query oracle-11g-r2
编辑- drachenstern:有关此问题的更多信息以及以下查询来源,请参阅此问题:
有人可以为以下查询建议一些调整选项吗?为一个项目运行时速度很快,但对于所有记录,完成运行需要数小时。PA 表中的 NUM_ROWS:2,101,528
我想按不同的时间范围按非唯一键对数据进行分组
SELECT project_nbr, status, MIN(aud_timestamp) start_dt, end_dt
FROM (
SELECT a.project_nbr
, status
, aud_timestamp
, ( SELECT MAX(p.aud_timestamp)
FROM pa p
WHERE p.project_nbr = a.project_nbr
AND p.status = a.status
AND p.aud_timestamp >= a.aud_timestamp
AND NOT EXISTS (
SELECT NULL
FROM pa q
WHERE q.project_nbr = p.project_nbr
AND q.status <> p.status
AND q.aud_timestamp < p.aud_timestamp
AND q.aud_timestamp > a.aud_timestamp
)
) end_dt
FROM pa a
)
GROUP BY project_nbr, status, end_dt
Run Code Online (Sandbox Code Playgroud)
这是导致您的查询需要数小时才能返回结果的违规代码:
and not exists (
select null
from pa q
where q.PROJect_NBR = p.project_nbr
and q.status <> p.status
and q.aud_timestamp < p.aud_timestamp
and q.aud_timestamp > a.aud_timestamp
)
Run Code Online (Sandbox Code Playgroud)
您应该真正将其转换为连接,因为就目前而言,您正在为 200 万条源行中的每条记录生成一个新查找。
归档时间: |
|
查看次数: |
435 次 |
最近记录: |