2016-10-25 3 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 

Я не знаю, если у вас есть NULL в b.columns, поэтому я добавляю COALESCE, чтобы справиться с ними.