复合连接本身很快,连接速度慢

时间:2017-01-23 14:47:23

标签: sql sql-server tsql join sql-server-2012

我试图帮助一个有大量复杂查询的同事。其中一个连接正确返回数据,但性能很差。如果我们自己运行连接,它会在几秒钟内返回。作为更大的查询的一部分,如果它一直有效,它将永远需要。

有人可以就如何优化这一点提供一些指示吗? 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

0 个答案:

没有答案
相关问题