一下SQL有什么优化方法?谢谢。

unusualmachine 2009-05-16 06:31:07
/* Formatted on 2009/05/16 17:49 (Formatter Plus v4.8.5) */
(SELECT uen_dps.uen, com.NAME, uen_invol.invol, uen_dps.workplace_no,
uen_dps.dps, uen_warn.warn_action_dt AS warn_action_dt,
uen_bl.dp_action_dt AS dp_action_dt, ROWNUM
FROM (SELECT uen, workplace_no,
REPLACE (wmsys.wm_concat (dps),
',',
' ' || CHR (10) || CHR (13)
) AS dps
FROM pen_dp_enq_wp_pnt
GROUP BY uen, workplace_no) uen_dps,
(SELECT warn.uen AS uen, warn.warn_action_dt AS warn_action_dt
FROM pen_dp_warn warn,
(SELECT uen, MAX (warn_action_dt) AS warn_action_dt
FROM pen_dp_warn
WHERE ADD_MONTHS (warn_action_dt, 12) > SYSTIMESTAMP
GROUP BY uen) temp_warn,
(SELECT uen
FROM pen_dp_summary
WHERE delete_ind = 'F'
AND (current_stage != '0' OR current_stage != '1')) summary
WHERE warn.uen = temp_warn.uen
AND warn.warn_action_dt = temp_warn.warn_action_dt
AND warn.uen = summary.uen) uen_warn,
(SELECT bl.uen, bl.workplace_no, bl.dp_action_dt AS dp_action_dt
FROM pen_bl bl,
(SELECT uen, workplace_no,
MAX (dp_action_dt) AS dp_action_dt
FROM pen_bl
WHERE dp_ind = 'T' AND end_dt > SYSTIMESTAMP
GROUP BY uen, workplace_no) temp_bl,
(SELECT uen
FROM pen_dp_summary
WHERE delete_ind = 'F'
AND (current_stage != '0' OR current_stage != '1')) summary
WHERE bl.uen = temp_bl.uen
AND temp_bl.workplace_no = bl.workplace_no
AND bl.dp_action_dt = temp_bl.dp_action_dt
AND bl.uen = summary.uen) uen_bl,
(SELECT DISTINCT event.uen, event.invol, item.workplace_no
FROM pen_dp_event event, pen_dp_item item
WHERE event.dp_event_id = item.dp_event_id) uen_invol,
entp_company com
WHERE uen_warn.uen = uen_dps.uen
AND uen_bl.uen = uen_dps.uen
AND uen_bl.workplace_no = uen_dps.workplace_no
AND uen_dps.uen = uen_invol.uen
AND NVL (uen_dps.workplace_no, 0) = NVL (uen_invol.workplace_no, 0)
AND com.uen = uen_dps.uen
AND ({?PARM_DP_STATUS} = 'Active' OR {?PARM_DP_STATUS} = 'Blacklisted')
UNION ALL
SELECT uen_dps.uen, com.NAME, uen_invol.invol, uen_dps.workplace_no,
uen_dps.dps, uen_warn.warn_action_dt AS warn_action_dt,
NULL AS dp_action_dt, ROWNUM
FROM (SELECT uen, workplace_no,
REPLACE (wmsys.wm_concat (dps),
',',
' ' || CHR (10) || CHR (13)
) AS dps
FROM pen_dp_enq_wp_pnt
GROUP BY uen, workplace_no) uen_dps,
(SELECT warn.uen AS uen, warn.warn_action_dt AS warn_action_dt
FROM pen_dp_warn warn,
(SELECT uen, MAX (warn_action_dt) AS warn_action_dt
FROM pen_dp_warn
WHERE ADD_MONTHS (warn_action_dt, 12) > SYSTIMESTAMP
GROUP BY uen) temp_warn,
(SELECT uen
FROM pen_dp_summary
WHERE current_stage = '2A' AND delete_ind = 'F') summary
WHERE warn.uen = temp_warn.uen
AND warn.warn_action_dt = temp_warn.warn_action_dt
AND warn.uen = summary.uen) uen_warn,
(SELECT DISTINCT event.uen, event.invol, item.workplace_no
FROM pen_dp_event event, pen_dp_item item
WHERE event.dp_event_id = item.dp_event_id
AND event.delete_ind = 'F'
AND item.delete_ind = 'F') uen_invol,
entp_company com
WHERE uen_dps.uen = uen_invol.uen
AND NVL (uen_dps.workplace_no, 0) = NVL (uen_invol.workplace_no, 0)
AND com.uen = uen_dps.uen
AND uen_warn.uen = uen_dps.uen
AND com.delete_ind = 'F'
AND ({?PARM_DP_STATUS} = 'Active' OR {?PARM_DP_STATUS} = 'Warned'))
...全文
75 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ojuju10 2009-05-19
  • 打赏
  • 举报
回复
比较长,将它拆分一个个sql语句,找出瓶颈
gkl0818 2009-05-19
  • 打赏
  • 举报
回复
定位这条长的SQL的瓶颈是在哪
pathuang68 2009-05-19
  • 打赏
  • 举报
回复
如果不能将他变短,那就十有八九说明数据结构的设计有问题
pathuang68 2009-05-19
  • 打赏
  • 举报
回复
最好的优化方法,就是将上面的很长的sql语句,变成多个小的sql,这样即使有问题也便于问题定位。
moqingcn 2009-05-19
  • 打赏
  • 举报
回复
这个,确实有点长。。
lqb2008 2009-05-19
  • 打赏
  • 举报
回复
好长啊!
soldierluo 2009-05-19
  • 打赏
  • 举报
回复
my god

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧