Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何优化这个MYSQL查询?(获得结果的巨大延迟)_Mysql - Fatal编程技术网

如何优化这个MYSQL查询?(获得结果的巨大延迟)

如何优化这个MYSQL查询?(获得结果的巨大延迟),mysql,Mysql,我在执行此特定查询时遇到问题。我已经测试并发现,由于那些已经或正在执行的指令,获取查询会浪费大量时间 请不要质疑我需要的信息,这是不可协商的。 我试着用化名Suma_Bondiolas s/hueso命名,但我不能 谢谢你的推荐 这里有三样东西。1在Heidi中查询的照片。2.sql代码。3查询结果 1个代码图像,便于快速理解 2代码: SELECT (ELT(WEEKDAY(fecha) + 1, 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viern

我在执行此特定查询时遇到问题。我已经测试并发现,由于那些已经或正在执行的指令,获取查询会浪费大量时间

请不要质疑我需要的信息,这是不可协商的。 我试着用化名Suma_Bondiolas s/hueso命名,但我不能

谢谢你的推荐

这里有三样东西。1在Heidi中查询的照片。2.sql代码。3查询结果

1个代码图像,便于快速理解

2代码:

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是值得的