Ir para conteúdo
Fórum Script Brasil

hlam

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por hlam

  1. Olá pessoal, onde trabalho temos um sistema de coleta de dados ambientais e esse sistema possui uma procedure que demora muito para retornar os dados.

    Tenho conhecimento muito básico em SQL e não tenho noção por onde tentar melhorar. Ficaria agradecido se puderem me sugerir por onde começar a melhorar esta procedure.

    Abaixo está o código da pocedure.

    Desde já agradeço!

    DELIMITER $$
    
    DROP PROCEDURE IF EXISTS `PesquisaAmbientalLinha2Diario` $$
    CREATE DEFINER=`root`@`localhost` PROCEDURE `PesquisaAmbientalLinha2Diario`(IN Val1 Datetime)
    BEGIN
      SELECT
        t1.A AS "Data Hora",
        t1.B AS "O2 (%)",
        t1.C AS "CO (ppm)",
        t1.D AS "NOx (mg/Nm3)",
        t1.E AS "THC (ppmv)",
        t1.F AS "Mat. Part. (mg/Nm3)",    
        t1.H AS "SOx (mg/m3)",
        t2.B AS "Alim. Farinha (t/h)",    
        t2.D AS "Combustível Precalcinador (t/h)",    
        t2.F AS "Combustível Maçarico (t/h)",
        t2.G AS "Balança 04r36M (t/h)",
        t2.H AS "Balança R14 (t/h)",
        t2.I AS "Balança R22 (t/h)"
    FROM
    
    (SELECT * FROM
    
    (SELECT datetime AS A FROM ambientallinha2_horario
    WHERE
        YEAR(datetime) = YEAR(Val1) AND
        MONTH(datetime) = MONTH(Val1) AND
        DAY(datetime) = DAY(Val1)
    GROUP BY
        YEAR(datetime),
        MONTH(datetime),
        DAY(datetime),
        HOUR(datetime)
    ORDER BY (datetime)) t11
    
    LEFT OUTER JOIN
    
    (SELECT
        (datetime) AS X,
        IF(CONTADOR >= 0.75*F10, ROUND(O2/CONTADOR,2), NULL) AS B,
        IF(CONTADOR >= 0.75*F10, ROUND(CO/CONTADOR,2), NULL) AS C,
        IF(CONTADOR >= 0.75*F10, ROUND(NOX/CONTADOR,2), NULL) AS D,
        IF(CONTADOR >= 0.75*F10, ROUND(THC/CONTADOR,2), NULL) AS E,
        IF(CONTADOR2 >=0.75*F10, ROUND(OPAC/CONTADOR2,2), NULL) AS F,
        IF(CONTADOR >= 0.75*F10, ROUND(SO2/CONTADOR,2), NULL) AS H    
    FROM
        ambientallinha2_horario
    WHERE
        YEAR(datetime) = YEAR(Val1) AND
        MONTH(datetime) = MONTH(Val1) AND
        DAY(datetime) = DAY(Val1)
    GROUP BY
        YEAR(datetime),
        MONTH(datetime),
        DAY(datetime),
        HOUR(datetime)
    ORDER BY (datetime))t12
    
    ON YEAR(t11.A) = YEAR(t12.X) AND
       MONTH(t11.A) = MONTH(t12.X) AND
       DAY(t11.A) = DAY(t12.X) AND
       HOUR(t11.A) = HOUR(t12.X)) t1
    
    LEFT OUTER JOIN
    
    
    (SELECT * FROM
    
    (SELECT
        (datetime) AS A,
        ROUND(FARINHA/CONTADOR,2) AS B,
        ROUND(COMB_PRECAL/CONTADOR,2) AS D,
        ROUND(COMB_MACARICO/CONTADOR,2) AS F,
        ROUND(COPROCESSAMENTO/CONTADOR,2) AS G
    FROM
        producaolinha2_param00_horario
    WHERE
        YEAR(datetime) = YEAR(Val1) AND
        MONTH(datetime) = MONTH(Val1) AND
        DAY(datetime) = DAY(Val1)
    GROUP BY
        YEAR(datetime),
        MONTH(datetime),
        DAY(datetime),
        HOUR(datetime)
    ORDER BY (datetime)) t21
    
    LEFT OUTER JOIN
    
    (SELECT
        (datetime) AS X,
        ROUND(AVG(R22),2) AS H,
        ROUND(AVG(R14),2) AS I
    FROM
        producaolinha2_param01
    WHERE
        YEAR(datetime) = YEAR(Val1) AND
        MONTH(datetime) = MONTH(Val1) AND
        DAY(datetime) = DAY(Val1)
    GROUP BY
        YEAR(datetime),
        MONTH(datetime),
        DAY(datetime),
        HOUR(datetime)
    ORDER BY (datetime)) t22
    
    ON YEAR(t21.A) = YEAR(t22.X) AND
       MONTH(t21.A) = MONTH(t22.X) AND
       DAY(t21.A) = DAY(t22.X) AND
       HOUR(t21.A) = HOUR(t22.X)) t2
    
    ON YEAR(t1.A) = YEAR(t2.A) AND
       MONTH(t1.A) = MONTH(t2.A) AND
       DAY(t1.A) = DAY(t2.A) AND
       HOUR(t1.A) = HOUR(t2.A);
    
    END $$
    
    DELIMITER ;

     

     

×
×
  • Criar Novo...