2016-10-25 32 views
0

我不是開發人員,因此需要幫助重寫此查詢而無需內部連接,因爲我認爲這是核心問題。這超過20秒。更小的塊在一秒之內運行。 Pl幫助。用笛卡爾積重寫查詢

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)。嘗試使用:

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來處理它們。