2016-11-08 9 views
0

쿼리가 매우 느리게 실행됩니다. 쿼리의 목표는 테이블 artikli의 테이블과 수량의 모든 기사를 나열하는 것입니다. 그럼 일단 가입하고 난 후에는 매우 느리게 도착 artikli_2015쿼리가 매우 느리게 실행됩니다.

SELECT a.artid, 
    a.artsifra, 
    a.artnaziv, 
    a.artstanje, 
    a.artstanjepalete, 
    (a.artstanje + a.artstanjepalete) AS total, 
    Sum(g.izlaz)      AS promet, 
    c.jmoznaka, 
    Sum(f.izlaz)      AS promet 
FROM artikli a 
     LEFT JOIN artikli_2016 g 
       ON a.artid = g.artikal 
     LEFT JOIN artikli_2015 f 
       ON a.artid = f.artikal 
     LEFT JOIN jed_mjere c 
       ON a.artmjera = c.jmid 
WHERE a.artroditelj != 0 
     AND a.artaktivan 
GROUP BY a.artid 
ORDER BY a.artid ASC 

(전년 올해 artikli_2016 및 artikli_2015) 문서 다른 표에 나열된 판매를보고 싶어요. 누군가가 나에게 쿼리를 빨리 실행하기위한 조언이나 솔루션을 제공 할 수 있다면 매우 유용 할 것입니다.

+1

테이블에 색인이 있습니까? 스키마를 공유 할 수 있습니까? –

+0

GROUP BY 절을 제거하십시오 –

+0

그냥 왼쪽 조인을 단순 조인으로 변경하십시오 –

답변

1

두 개의 로트 (여러 개의 레코드로 인해) 때문에 아마도 합계를 얻기 위해 두 개의 하위 쿼리를 사용해야 할 것입니다. jed_mjere는 각 ArtMjera에 대해 최대 하나의 레코드 만 가지고 있다고 가정합니다.

SELECT a.ArtId, 
     a.ArtSifra, 
     a.ArtNaziv, 
     a.ArtStanje, 
     a.ArtStanjePalete, 
     (a.ArtStanje + a.ArtStanjePalete) as total, 
     g.promet, 
     c.JmOznaka, 
     f.promet 
FROM artikli a 
LEFT OUTER JOIN 
(
    SELECT Artikal, SUM(Izlaz) AS promet 
    FROM artikli_2016 
    GROUP BY Artikal 
) g 
ON a.ArtId = g.Artikal 
LEFT OUTER JOIN 
(
    SELECT Artikal, SUM(Izlaz) AS promet 
    FROM artikli_2015 
    GROUP BY Artikal 
) f 
ON a.ArtId = f.Artikal 
LEFT OUTER JOIN jed_mjere c ON a.ArtMjera = c.jmid 
WHERE a.ArtRoditelj != 0 
AND a.ArtAktivan 
ORDER BY a.ArtId ASC 

쿼리 만이 레코드를 제외에 가입하고 어쩌면 가치가 artikli의 레코드 (예 : a.ArtRoditelj! = 0 AND a.ArtAktivan 제외 대부분의 행)의 소수를 처리하는 경우 하위 쿼리.

SELECT a.ArtId, 
     a.ArtSifra, 
     a.ArtNaziv, 
     a.ArtStanje, 
     a.ArtStanjePalete, 
     (a.ArtStanje + a.ArtStanjePalete) as total, 
     g.promet, 
     c.JmOznaka, 
     f.promet 
FROM artikli a 
LEFT OUTER JOIN 
(
    SELECT g.Artikal, SUM(g.Izlaz) AS promet 
    FROM artikli a 
    INNER JOIN artikli_2016 g 
    ON a.ArtId = g.Artikal 
    WHERE a.ArtRoditelj != 0 
    AND a.ArtAktivan 
    GROUP BY g.Artikal 
) g 
ON a.ArtId = g.Artikal 
LEFT OUTER JOIN 
(
    SELECT f.Artikal, SUM(f.Izlaz) AS promet 
    FROM artikli a 
    INNER JOIN artikli_2015 f 
    ON a.ArtId = g.Artikal 
    WHERE a.ArtRoditelj != 0 
    AND a.ArtAktivan 
    GROUP BY f.Artikal 
) f 
ON a.ArtId = f.Artikal 
LEFT OUTER JOIN jed_mjere c ON a.ArtMjera = c.jmid 
WHERE a.ArtRoditelj != 0 
AND a.ArtAktivan 
ORDER BY a.ArtId ASC 
+0

정확히 제가 고마워해야 할 부분입니다. – user3651819

관련 문제