[firebase-br] Ajuda c/ Otimização de SQL (Muito importante!)!!!
Paulo (O2 Tecnologia)
paulo em o2tecnologia.com.br
Qua Jan 16 10:40:16 -03 2008
Tente algo assim.
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 ))
WHERE ( P.INICIO >= '01/01/2007 00:00:00' ) AND ( P.TERMINO <= '12/31/2007 23:59:59' ) AND
( P.TURNO BETWEEN 1 AND 3 )
GROUP BY O.ID_AREA,O.ID_OPERACAO
Roger escreveu:
> 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
>
>
>
Mais detalhes sobre a lista de discussão lista