我试图帮助一个有大量复杂查询的同事。其中一个连接正确返回数据,但性能很差。如果我们自己运行连接,它会在几秒钟内返回。作为更大的查询的一部分,如果它一直有效,它将永远需要。
有人可以就如何优化这一点提供一些指示吗? sub select会比join更好吗?
LEFT JOIN (SELECT cip.CaseID, dispo_sub2.CaseTitle, DATEPART(YEAR,MAX(cip.DispoDt)) DispoYr, cip.DispoDt, cip.DispoCode, cip.DispoDesc, LTRIM(rea.Reasons) Reasons, cip.CountInvPersAddDt
FROM
(SELECT dispo_sub.CaseID, dispo_sub.CaseTitle, dispo_sub.DispoDt, MAX(cip_sub2.CountInvPersAddDt) LastAddDt
FROM
(SELECT cip_sub.CaseID, c.casetitle, MAX(cip_sub.DispoDt) DispoDt
FROM jw50_CountInvPers cip_sub
INNER JOIN jw50_Case c on c.CaseID = cip_sub.CaseID
WHERE c.CaseTypeCode = 'TY706'
AND cip_sub.DispoDt IS NOT NULL
AND cip_sub.DispoCode IS NOT NULL
GROUP BY cip_sub.CaseID, c.CaseTitle) dispo_sub
INNER JOIN jw50_CountInvPers cip_sub2 on cip_sub2.CaseID = dispo_sub.CaseID and cip_sub2.DispoDt = dispo_sub.DispoDt
GROUP BY dispo_sub.CaseID, dispo_sub.CaseTitle, dispo_sub.DispoDt) dispo_sub2
INNER JOIN jw50_CountInvPers cip on cip.CaseID = dispo_sub2.CaseID AND cip.DispoDt = dispo_sub2.DispoDt AND cip.CountInvPersAddDt = dispo_sub2.LastAddDt
LEFT JOIN (SELECT
c_sub.CaseID,
STUFF((SELECT '; ' + ConditionTypeDesc
FROM jw50_Condition con
WHERE con.CaseID = c_sub.CaseId
ORDER BY ConditionTypeDesc
FOR XML PATH('')), 1, 1, '') [Reasons]
FROM jw50_Case c_sub
GROUP BY c_sub.CaseID) rea on rea.CaseID = dispo_sub2.CaseID
GROUP BY cip.CaseID, dispo_sub2.CaseTitle, cip.DispoDt, cip.DispoCode, cip.DispoDesc, rea.Reasons, cip.CountInvPersAddDt) dispo on dispo.CaseID = c.CaseID