如何优化这个MYSQL查询?(获得结果的巨大延迟)
我在执行此特定查询时遇到问题。我已经测试并发现,由于那些已经或正在执行的指令,获取查询会浪费大量时间 请不要质疑我需要的信息,这是不可协商的。 我试着用化名Suma_Bondiolas s/hueso命名,但我不能 谢谢你的推荐 这里有三样东西。1在Heidi中查询的照片。2.sql代码。3查询结果 1个代码图像,便于快速理解 2代码:如何优化这个MYSQL查询?(获得结果的巨大延迟),mysql,Mysql,我在执行此特定查询时遇到问题。我已经测试并发现,由于那些已经或正在执行的指令,获取查询会浪费大量时间 请不要质疑我需要的信息,这是不可协商的。 我试着用化名Suma_Bondiolas s/hueso命名,但我不能 谢谢你的推荐 这里有三样东西。1在Heidi中查询的照片。2.sql代码。3查询结果 1个代码图像,便于快速理解 2代码: SELECT (ELT(WEEKDAY(fecha) + 1, 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viern
SELECT (ELT(WEEKDAY(fecha) + 1, 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo')) AS Día_Semana
,fecha AS 'Fecha_Desposte'
,IFNULL(ROUND((
SELECT sum(kilos)
FROM rindes
WHERE (producto = 1625 OR producto = 1725 OR producto = 1695 OR producto = 1732 OR producto = 2001 OR producto = 2201)
AND fecha=Fecha_Desposte
),2),0) AS 'Suma_Bondiolas s/hueso'
,IFNULL(ROUND((
SELECT sum(kilos)
FROM rindes
WHERE (producto = 1427 OR producto = 1527 OR producto = 1695 OR producto = 1698)
AND fecha=Fecha_Desposte
),2),0) AS 'Suma_huesos_Bondiola'
,( SELECT sum(kilos)
FROM rindes
WHERE (producto = 1625 OR producto = 1725 OR producto = 1695 OR producto = 1732 OR producto = 2001 OR producto = 2201)
AND fecha=Fecha_Desposte
)/(SELECT sum(kilos)
FROM rindes
WHERE (producto = 1427 OR producto = 1527 OR producto = 1695 OR producto = 1698)
AND fecha=Fecha_Desposte
) as 'Huesos Bondiola/Bondiolas sin huesos'
FROM rindes
WHERE fecha >='2018-10-29' AND fecha <= '2019-01-30'
GROUP BY Fecha_Desposte
ORDER BY Fecha_Desposte DESC
3结果:
似乎是条件聚合的候选者:
SELECT `Dia_Semana`, `Fetcha_Deposte`
, IFNULL(ROUND(`Suma_Bondiolas s/hueso`, 2), 0) AS `Suma_Bondiolas s/hueso`
, IFNULL(ROUND(`Suma_huesos_Bondiola`, 2), 0) AS `Suma_huesos_Bondiola`
, `Suma_Bondiolas s/hueso` / `Suma_huesos_Bondiola` AS `Huesos Bondiola/Bondiolas sin huesos`
FROM (
SELECT ELT(WEEKDAY(fecha) + 1, 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo') AS `Día_Semana`
, fecha AS `Fecha_Desposte`
, SUM(CASE WHEN producto IN (1625,1725,1695,1732,2001,2201) THEN kilos ELSE 0 END) AS `Suma_Bondiolas s/hueso`
, SUM(CASE WHEN producto IN (1427,1527,1695,1698) THEN kilos ELSE 0 END) AS `Suma_huesos_Bondiola`
FROM rindes
WHERE fecha >='2018-10-29' AND fecha <= '2019-01-30'
GROUP BY Fecha_Desposte, `Día_Semana`
) AS subQ
ORDER BY Fecha_Desposte DESC
;
注意,这种子查询格式并不是严格必需的,但它可以防止在最后一列中重复前两个sum表达式
此外,如果使用的产品id值是数据的一小部分,那么将[all product id IN the Twest sum Expression]中的和producto添加到subQ中,也可以加快速度。我听说MySQL的最新版本对IN操作符进行了一些优化,但我不确定它现在是否可以利用索引;但是,如果您添加条件,那么尝试索引fecha,producto是值得的