关于子串的MySQL连接很慢

时间:2016-09-02 10:44:47

标签: mysql sql

我有一个查询,我在子字符串上进行连接,问题是这很难完成。有没有更有效的方法来写这个?

SELECT *, SUM(s.pris*s.antall) AS total, SUM(s.antall) AS antall
FROM ecs_statistikk AS s 
JOIN butikk_ordre AS bo ON ordreId=bo.ecs_ordre_id AND butikkNr=bo.site_id 
JOIN ecs_supplier AS l ON SUBSTRING( s.artikkelId, 1,2 )=l.lev_id
WHERE s.salgsDato>='2016-6-01' AND s.salgsDato<='2016-09-30'
GROUP BY l.lev_id ORDER BY total DESC 

1 个答案:

答案 0 :(得分:0)

首先,我会检查索引。对于此查询:

$ awk -F";" '!seen[$1, $2, $3]++' f2 f1 | sort
AA;123;2016-01-31;7;983.63
AA;123;2016-02-01;1;75.24
AA;123;2016-08-24;17;1687.73
AB;123;2000-08-08;1;756.1
AB;456;2016-07-07;2;8.24
CC;123;2007-07-21;15;10.34
CC;456;2009-09-09;11;2161.65
CC;789;2005-04-23;1;1345.6
DD;91;2016-08-03;5;98.48

您需要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)和ecs_supplier(lev_id)`上的索引。

接下来,我会问你是否需要最后一个butikk_ordre(ecs_ordre_id, site_id)。这样做你想要的吗?

JOIN