我不是开发人员,因此在没有内部联接的情况下需要帮助重写此查询,因为我认为这是核心问题。这运行超过20秒。较小的块在一秒钟内运行。帮助。
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
答案 0 :(得分: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
我不知道NULL
中是否有b.columns
,所以我添加了COALESCE来处理它们。