2016-11-08 13 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

2つのロットの複数のレコード(私は疑いがあります)のため、おそらく合計を得るために2つのサブクエリを使用する必要があります。 jed_mjereにはArtMjeraごとに最大で1つのレコードしかないと仮定します。でレコードを除外するために参加をして、その後、多分価値

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 

クエリのみ(すなわちa.ArtRoditelj!= 0 AND a.ArtAktivan除くほとんどの行)artikliから少数のレコードを扱っている場合サブクエリ。

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

関連する問題