まず、インデックスを確認します。このクエリの場合:
SELECT *, SUM(s.pris*s.antall) AS total, SUM(s.antall) AS antall
FROM ecs_statistikk s JOIN
butikk_ordre bo
ON s.ordreId = bo.ecs_ordre_id AND
s.butikkNr = bo.site_id JOIN
ecs_supplier l
ON SUBSTRING(s.artikkelId, 1, 2) = l.lev_id
WHERE s.salgsDato >= '2016-06-01' AND s.salgsDato <= '2016-09-30'
GROUP BY l.lev_id
ORDER BY total DESC ;
あなたはecs_statistikk(salgsDato, ordreId, butikkNr, artikkelId)
、butikk_ordre(ecs_ordre_id, site_id)
、およびecs_supplier(lev_id) `のインデックスをしたいです。
次に、最後にJOIN
が必要かどうか質問します。これはあなたが望むことをしますか?
SELECT LEFT(s.artikkelId, 2) as lev_id, *,
SUM(s.pris*s.antall) AS total, SUM(s.antall) AS antall
FROM ecs_statistikk s JOIN
butikk_ordre bo
ON s.ordreId = bo.ecs_ordre_id AND
s.butikkNr = bo.site_id
WHERE s.salgsDato >= '2016-06-01' AND s.salgsDato <= '2016-09-30'
GROUP BY LEFT(s.artikkelId, 2)
ORDER BY total DESC ;
これはパフォーマンスには影響しませんが、実際には 'GROUP BY 'で' SELECT * 'を使うのは悪い習慣です。 –
MySQLは関数インデックスをサポートしていないので、部分文字列なしで結合する方法を見つけることができない場合、性能は理想的ではないかもしれません。 –
私はSELECT *を実行しません。ちょうどあなたが読むのが簡単だと思っただけです。 – johnohod