[firebase-br] Ajuda c/ Otimização de SQL (Muito importante!)!!!

Kleber Caneva kdcc em terra.com.br
Qua Jan 16 14:38:01 -03 2008


Como você está retonrando os dados do Select se não está usando FOR ?
Mande o Metadadata compelto da sua SP.

Mas em todo caso, ai vai um exemplo.

FOR
  SELECT O.ID_AREA,O.ID_OPERACAO
  FROM OPERACOES O
  INTO :ID_AREA, :ID_OPERACAO
DO
  BEGIN
    FOR
      SELECT
          AVG(P.DURACAO) TOTAL,
          AVG(P.TRANSPORTE) TRANSPORTE,
          AVG(P.LIMITE) LIMITE,
          COUNT(1) as CICLOS,
          SUM(CASE WHEN P.EXCEDIDO > 0 THEN 1 ELSE 0 END) as EXCEDIDOS,
          SUM(EXCEDIDO) MINUTOS
      FROM PROCESSADOS P
     WHERE (P.OPERACAO_ID = :ID_OPERACAO)
          AND (P.AREA_ID = :ID_AREA)
          AND P.TURNO IN(1,2,3)
          AND (P.INICIO >= '01/01/2007')
          AND (P.TERMINO < '01/01/2008')
     INTO :TOTAL, :TRANSPORTE, :LIMITE, :CICLOS, :EXCEDIDOS, :MINUTOS
  DO
      Suspend;
END

[]´s

Kléber Caneva


----- Original Message ----- 
From: "Roger" <pikurim em hotmail.com>
To: <lista em firebase.com.br>
Sent: Wednesday, January 16, 2008 10:46 AM
Subject: Re: [firebase-br]Ajuda c/ Otimização de SQL (Muito importante!)!!!


Cara tem algum exemplo ai usando FOR? eu nunca usei!
Valeu.

> - Pq vc está usando CASE nessa linha ?
>     CASE WHEN COUNT(*) > 1 THEN COUNT(*) ELSE 0 END CICLOS,

É por que mesmo quando não é encontrado registro correspondente na tabela
processados aparece 1 e nesse
caso deve aparecer null também.

Roger.



"Kleber Caneva" <kdcc em terra.com.br> escreveu na
notícia da mensagem:097501c85846$c3a5b0f0$8603a8c0 em motocana.com...
> Sugestões:
>
> - Crie For aninhados.  Primeiro faça um FOR na tabela OPERACOES e só
> depois
> faça o For para PROCESSADOS, com isso vc não precisará do Group by
>
> - Não use COUNT(*), use COUNT(1) - O banco precisa de uma operação a mais
> para entender o *
>

>
> []´s
>
> Kléber Caneva
>
>
> ----- Original Message ----- 
> From: "Roger" <pikurim em hotmail.com>
> To: <lista em firebase.com.br>
> Sent: Wednesday, January 16, 2008 8:50 AM
> Subject: [firebase-br] Ajuda c/ Otimização de SQL (Muito importante!)!!!
>
>
> Bom dia, estou com um dilema super urgente! tenho uma
> tabela c/ 2 milhões de registros e a cada mês ela aumenta
> uns 150 mil registros.
>
> Possuo uma SP de consulta:
>
> SELECT O.ID_AREA,O.ID_OPERACAO,
>                 AVG(P.DURACAO) TOTAL,
>                 AVG(P.TRANSPORTE) TRANSPORTE,
>                 AVG(P.LIMITE) LIMITE,
>                 CASE WHEN COUNT(*) > 1 THEN COUNT(*) ELSE 0 END CICLOS,
>                 SUM(CASE WHEN P.EXCEDIDO > 0 THEN 1 ELSE 0 END) EXCEDIDOS,
>                 SUM(EXCEDIDO) MINUTOS
>
> FROM OPERACOES O
> LEFT OUTER JOIN PROCESSADOS P ON  (O.ID_OPERACAO = P.OPERACAO_ID) AND
>
>   (O.ID_AREA = P.AREA_ID) AND
>
>  ((P.INICIO >= '01/01/2007 00:00:00') AND
>
>   (P.TERMINO <= '12/31/2007 23:59:59')) AND
>
>    P.TURNO IN(1,2,3)
> GROUP BY O.ID_AREA,O.ID_OPERACAO
>
> Esta SP demora quase seis segundos para rodar sendo que a tabela
> PROCESSADOS
> tem 100 mil registros, porém quando tem 1 milhão a demora multiplica por
> 10,
> ou seja, demora quase 60 segundos p/ rodar, preciso fazer diferente:
>
> Percebi que se eu tirar a consulta inicial na tabela Operacoes, que é
> feita
> para poder mostrar todas as operacoes na lista mesmo que não haja
> ocorrencias na tabela PROCESSADOS isso c/ LEFT OUTER JOIN, então e se eu
> consultar separadamente um SELECT * FROM OPERACOES, e depois rodar outro
> SQL
> diretamente na tabela PROCESSADOS, eu percebi que o SQL da PROCESSADAS
> DIRETO, sem LEFT OUTER JOIN demora menos de MEIO SEGUNDO, então como posso
> fazer para JUNTAR OS DOIS SQLS no FIREBIRD?
>
> Gerando o sql original como resultado?
>
> Obrigado!
>
> Roger!
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
> E-mail classificado pelo Identificador de Spam Inteligente Terra.
> Para alterar a categoria classificada, visite
> http://mail.terra.com.br/cgi-bin/imail.cgi?+_u=kdcc&_l=1,1200484333.88385.5529.buruma.hst.terra.com.br,5711,Des15,Des15
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa

E-mail classificado pelo Identificador de Spam Inteligente Terra.
Para alterar a categoria classificada, visite
http://mail.terra.com.br/cgi-bin/imail.cgi?+_u=kdcc&_l=1,1200491222.795424.10509.aldabra.hst.terra.com.br,7436,Des15,Des15






Mais detalhes sobre a lista de discussão lista