2016-10-25 2 views
0

저는 개발자가 아니므로이 문제가 핵심 문제라고 생각하기 때문에 내부 조인없이이 쿼리를 다시 작성하는 데 도움이 필요합니다. 이것은 20 초 이상 실행됩니다. 작은 덩어리가 1 초 안에 돌아갑니다. 도와주세요.데카르트 곱으로 쿼리 다시 작성

select a.compID, b.InitialRT, b.VwRgts, b.UpdRgts, b.InsRgts, b.delRgts, b.Sscrnum , c.UserID 
from tablecmpy a, tbldetrght b (nolock) 
inner join tableuser c (nolock) on c.GroupID = b.UserId 
where b.RecType='G' 
and b.compID='[ALL]' 
and b.InitialRT+b.VwRgts+b.UpdRgts+b.InsRgts+b.delRgts > 0 
+1

데카르트 조인의 결과가 더 빠를 가능성은 거의 없습니다. 요구 사항과 일치하는 결과는 말할 것도 없습니다. 그것은 저에게'c.groupid = b.groupid'에 대한 조인이 필요하다고 생각합니다. 아마도 EXPLAIN을 체크 아웃하고 적절한 인덱스에 시간을 투자하여 조인과 WHERE 조건을 커버 할 수 있습니다. – JNevill

답변

0

이미 (이전 스타일 조인) 여기 from tablecmpy a, tbldetrght b (nolock) 직교 가입 얻었다. 당신이 b.columnsNULL이있는 경우

SELECT a.compID, 
     b.InitialRT, 
     b.VwRgts, 
     b.UpdRgts, 
     b.InsRgts, 
     b.delRgts, 
     b.Sscrnum, 
     c.UserID 
FROM tablecmpy a (nolock) 
CROSS JOIN tbldetrght b (nolock) 
INNER JOIN tableuser c (nolock) 
    ON c.GroupID = b.UserId 
WHERE b.RecType='G' 
    AND b.compID='[ALL]' 
    AND COALESCE(b.InitialRT,0) + 
     COALESCE(b.VwRgts,0) + 
     COALESCE(b.UpdRgts,0) + 
     COALESCE(b.InsRgts,0) + 
     COALESCE(b.delRgts,0) > 0 

나도 몰라, 그래서 나는 그들을 처리 할 수 ​​COALESCE을 추가 사용해보십시오.