SELECT D.SETID, D.DEPTID, I.DEPTID
FROM PS_DEPT_TBL D, PS_CG_ITF_DEPCHILD I
WHERE D.CG_DEPT_ID = '103'
AND D.SETID = I.SETID
AND D.DEPTID = I.CG_DEPTID_CHILD
AND D.DEPTID <> I.DEPTID
AND D.EFF_STATUS = 'A'
AND D.EFFDT = (SELECT MAX(D2.EFFDT)
FROM PS_DEPT_TBL D2
WHERE D.SETID = D2.SETID
AND D.DEPTID = D2.DEPTID
AND D.EFFDT <= SYSDATE)
AND I.TREE_NODE_NUM =
(SELECT MIN(DF2.TREE_NODE_NUM)
FROM PS_CG_ITF_DEPCHILD DF2, PS_DEPT_TBL DP
WHERE DF2.SETID = D.SETID
AND DF2.CG_DEPTID_CHILD = D.DEPTID
AND DF2.DEPTID <> D.DEPTID
AND DF2.SETID = DP.SETID
AND DF2.DEPTID = DP.DEPTID
AND DP.EFF_STATUS = 'A'
AND DP.CG_DEPT_ID = '102'
AND DP.EFFDT = (SELECT MAX(DP2.EFFDT)
FROM PS_DEPT_TBL DP2
WHERE DP2.SETID = DP.SETID
AND DP2.DEPTID = DP.DEPTID
AND DP2.EFFDT <= SYSDATE))
用这SETID, DEPTID,EFFDT三个字段创建 组合索引
把这段:
SELECT MAX(DP2.EFFDT)
FROM PS_DEPT_TBL DP2
WHERE DP2.SETID = DP.SETID
AND DP2.DEPTID = DP.DEPTID
AND DP2.EFFDT <= SYSDATE
做成一个tmp吧
先 with tmp as (SELECT MAX(DP2.EFFDT) as EFFDT
FROM PS_DEPT_TBL DP2
WHERE DP2.SETID = DP.SETID
AND DP2.DEPTID = DP.DEPTID
AND DP2.EFFDT <= SYSDATE)
然后再select ..引用这个tmp。这样可以少执行点