Ir para conteúdo
Fórum Script Brasil
  • 0

Lentidão em consulta


hlam

Pergunta

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 ;

 

 

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...