SQL语句调优方面,请指导

[复制链接]
查看11 | 回复4 | 2014-2-18 16:43:09 | 显示全部楼层 |阅读模式
系统跑了下ADDM发现以下语句特别影响性能,请各位给个调优路径,本人新手不知道该如何调,谢谢
select schedule.ID AS scheduleId,
schedule.TTB_DATE AS scheduleDate,
staff.STAFF_NAME AS staffName,
staff.STAFF_ID AS staffId,
staff.NODE_ID AS nodeId,
staff.AGENTNUM AS staffAgentNum,
TO_CHAR(schedule.TTB_DATE, 'YYYY-MM-DD') AS isoDate,
schedule.PLAN_START_TIME AS startWorkTime,
schedule.PLAN_END_TIME AS endWorkTime,

(case
when ((schedule.PLAN_END_TIME - checkout.check_time) * 24 * 60 * 60 > :1) AND

((SELECT ATTENDANCE_ID

FROM CMN_DAILY_ATTENDANCE appeal

WHERE appeal.ATTENDANCE_DATE = schedule.TTB_DATE

AND appeal.STAFF_ID = staff.STAFF_ID

AND appeal.PROCESS_STATUS = 1

AND appeal.TYPE_ITEM_ID = :2) IS NULL) then

1
else

0
end) AS isLeaveEarly,

(case
when ((checkout.check_time IS NULL) OR (checkin.check_time IS NULL)) AND

((SELECT ATTENDANCE_ID

FROM CMN_DAILY_ATTENDANCE appeal

WHERE appeal.ATTENDANCE_DATE = schedule.TTB_DATE

AND appeal.STAFF_ID = staff.STAFF_ID

AND appeal.PROCESS_STATUS = 1

AND appeal.TYPE_ITEM_ID = :3) IS NULL) then

1
else

0
end) isAbsenteeism,

(case
when ((checkin.check_time - schedule.PLAN_START_TIME) * 24 * 60 * 60 > :4) AND

((SELECT ATTENDANCE_ID

FROM CMN_DAILY_ATTENDANCE appeal

WHERE appeal.ATTENDANCE_DATE = schedule.TTB_DATE

AND appeal.STAFF_ID = staff.STAFF_ID

AND appeal.PROCESS_STATUS = 1

AND appeal.TYPE_ITEM_ID = :5) IS NULL) then

1
else

0
end) AS isLate,
checkin.check_timeas realStartWorkTime,
checkout.check_time as realEndWorkTime,
schedule.WORK_FLAGas workFlag,
schedule.PLAN_WORK_TIME as planWorkTime
from ttb_work_result schedule
LEFT OUTER JOIN HRM_STAFF staff
ON schedule.STAFF_AGENTNUM = staff.AGENTNUM
left outer join (select id, check_time

from (select staff_agentnum,

id,

ttb_date,

check_time,

rank() over(partition by staff_agentnum, ttb_date order by difference asc) as rnk

from (select schdule.id,

schdule.staff_agentnum,

schdule.ttb_date,

checkin.check_time,

abs(schdule.plan_start_time -

checkin.check_time) as difference

from ttb_work_result schdule

left outer join middle_cmn_check_time checkin

on checkin.check_type = 0

left outer join INF_RAS_USERS agentInfo

on checkin.staff_num = agentInfo.din

and schdule.staff_agentnum =

to_char(agentInfo.pin))

where difference = :7
AND schedule.TTB_DATE <= :8
ORDER BY isoDate desc, staffAgentNum

回复

使用道具 举报

千问 | 2014-2-18 16:43:09 | 显示全部楼层
首先,执行计划发出来
回复

使用道具 举报

千问 | 2014-2-18 16:43:09 | 显示全部楼层
执行计划
回复

使用道具 举报

千问 | 2014-2-18 16:43:09 | 显示全部楼层
真不短啊


回复

使用道具 举报

千问 | 2014-2-18 16:43:09 | 显示全部楼层
本帖最后由 淡定与洒脱 于 2014-1-23 19:52 编辑
新手直接搞这么复杂的sql调优,dba行情果然不行了,这活没15k工资不要干啊,玩笑玩笑。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行