2016-10-25 20 views
0

私は開発者ではないので、内部結合なしでこのクエリを書き直す際には、それがコアの問題だと思うので助けが必要です。これは20秒以上実行されます。小さなチャンクは1秒以内に実行されます。 P1ヘルプ。デカルトデカルトをデカルト書き直し

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をチェックし、適切なインデックスにあなたの時間を投資して、あなたの結合とあなたの 'どこ 'の条件をカバーするのでしょうか? – JNevill

答えて

0

あなたはすでに(古いスタイルの結合)ここfrom tablecmpy a, tbldetrght b (nolock)デカルトが参加しました。使用してみてください:

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 

あなたはb.columnsNULLを持っている場合、私は知らないので、私はそれらを処理するためにCOALESCEを追加します。