[firebase-br] ajuda para query

Denis denisrocha em hotmail.com
Ter Jun 19 15:37:11 -03 2007


Nos meus sistemas, eu uso sempre procedures selecionáveis para as instruções 
mais complexas. Funciona muito bem e dentro do sistema fica muito mais 
legivel. Existe tbm um ganho de performance sim. Sem contar que depois a 
manutenção do seu banco de dados fica muito mais fácil.

A solução do Kleber é excelente.

Denis


"Kleber Caneva" <kdcc em terra.com.br> escreveu na 
mensagem news:104101c7b28e$1c5485f0$8603a8c0 em motocana.com...
Pelo tamanho do Select, já lhe dou o primeiro conselho.. use SP
Selecionavel..

Além de performace, ficará mais legivel.

[]´s

Kléber Caneva

----- Original Message ----- 
From: "Alberto Brito" <comercial em abritolda.com>
To: <lista em firebase.com.br>
Sent: Tuesday, June 19, 2007 12:30 PM
Subject: [firebase-br] ajuda para query


Oi

Venho pedir a ajuda do pessoal, para ver se e possivel optimizar uma query.

tenho a seguinte query:

SELECT
   ARTIGOS.CODART,
   CAST('    === Saldo Anterior ===' AS VARCHAR(90))NOMART,
   CAST('1' AS INTEGER) TIPO,
   CAST('' AS VARCHAR(4)) SERIE,
   CAST('0' AS INTEGER) NUMERO,
   CAST('12-30-1899' AS DATE) DATA,
   CAST('' AS VARCHAR(30)) DESCRI,
   CAST('' AS VARCHAR(16)) CLI,
   CAST('' AS VARCHAR(90)) NOME,
   CAST('1' AS INTEGER) ARMAZEM,
   CAST('0' AS NUMERIC(15,3)) IVA,
   SUM((case when (tipo_doc.DEBITO_CREDITO='N') then FAC_DET.QUANT else
(FAC_DET.QUANT*-1) end)) AS QUANT,
   (SELECT coalesce(avg(FAC_DET.PREC_UNIT),0)
FROM
   FAC_DET
   INNER JOIN TIPO_DOC ON (FAC_DET.ARMAZEM = TIPO_DOC.ARMAZEM)
   AND (FAC_DET.TIPO = TIPO_DOC.NUMERO)
   AND (FAC_DET.SERIE = TIPO_DOC.SERIE)
WHERE
   (FAC_DET.ACTZ_STOCK = 'S') AND
   (TIPO_DOC.DOC_ENTRADA = 'S') AND
   (FAC_DET.COD_ART = artigos.codart)
   and (FAC_DET.DATA<='12-30-1899')) AS PMP
FROM
   ARTIGOS
   INNER JOIN FAC_DET ON (ARTIGOS.CODART = FAC_DET.COD_ART)
   INNER JOIN FACT_CAB ON (FAC_DET.ARMAZEM = FACT_CAB.ARMAZEM)
   AND (FAC_DET.TIPO = FACT_CAB.TIPO_DOC)
   AND (FAC_DET.SERIE = FACT_CAB.SERIE)
   AND (FAC_DET.NUMERO = FACT_CAB.NUMERO)
   AND (FAC_DET.DATA = FACT_CAB.DATA_DOC)
   INNER JOIN TIPO_DOC ON (FACT_CAB.ARMAZEM = TIPO_DOC.ARMAZEM)
   AND (FACT_CAB.TIPO_DOC = TIPO_DOC.NUMERO)
   AND (FACT_CAB.SERIE = TIPO_DOC.SERIE)
WHERE
   (FAC_DET.ACTZ_STOCK = 'S')
   and (FAC_DET.DATA <= '12-30-1899' )
    AND ARTIGOS.CODART>='MAZOOTE'
    AND ARTIGOS.CODART<='MAZOOTE'
GROUP BY
   1,2,3,4,5,6,7,8,9,10,11
union all
SELECT
   ARTIGOS.CODART,
   ARTIGOS.NOMART,
   FAC_DET.TIPO,
   FAC_DET.SERIE,
   FAC_DET.NUMERO,
   FACT_CAB.DATA_DOC,
   FACT_CAB.DESCRI,
   FACT_CAB.CLI,
   FACT_CAB.NOME,
   FACT_CAB.ARMAZEM,
   FAC_DET.IVA,
   (case when (tipo_doc.DEBITO_CREDITO='N') then FAC_DET.QUANT else
(FAC_DET.QUANT*-1) end) as QUANT,
   (SELECT coalesce(avg(FAC_DET.PREC_UNIT),0)
FROM
   FAC_DET
   INNER JOIN TIPO_DOC ON (FAC_DET.ARMAZEM = TIPO_DOC.ARMAZEM)
   AND (FAC_DET.TIPO = TIPO_DOC.NUMERO)
   AND (FAC_DET.SERIE = TIPO_DOC.SERIE)
WHERE
   (FAC_DET.ACTZ_STOCK = 'S') AND
   (TIPO_DOC.DOC_ENTRADA = 'S') AND
   (FAC_DET.COD_ART = artigos.codart)
   and (FAC_DET.DATA<=FACT_CAB.DATA_DOC)) AS PMP
FROM
   ARTIGOS
   INNER JOIN FAC_DET ON (ARTIGOS.CODART = FAC_DET.COD_ART)
   INNER JOIN FACT_CAB ON (FAC_DET.ARMAZEM = FACT_CAB.ARMAZEM)
   AND (FAC_DET.TIPO = FACT_CAB.TIPO_DOC)
   AND (FAC_DET.SERIE = FACT_CAB.SERIE)
   AND (FAC_DET.NUMERO = FACT_CAB.NUMERO)
   AND (FAC_DET.DATA = FACT_CAB.DATA_DOC)
   INNER JOIN TIPO_DOC ON (FACT_CAB.ARMAZEM = TIPO_DOC.ARMAZEM)
   AND (FACT_CAB.TIPO_DOC = TIPO_DOC.NUMERO)
   AND (FACT_CAB.SERIE = TIPO_DOC.SERIE)
WHERE
   (FAC_DET.ACTZ_STOCK = 'S')
   and (FAC_DET.DATA > '12-30-1899' )
   and (FAC_DET.DATA <= '06-19-2007' )
    AND ARTIGOS.CODART>='MAZOOTE'
    AND ARTIGOS.CODART<='MAZOOTE'
ORDER BY 1 ASC
        , 2 ASC
        , 3 ASC
        , 4 ASC


ela esta a demorar imenso tempo para me retornar os dados
migrei para o firebird 2.01
e possivel com os novos recursos optimizar a query para um melhor
desempenho?


Obrigado pessoal

______________________________________________
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

Esta mensagem foi verificada pelo E-mail Protegido Terra.
Scan engine: McAfee VirusScan / Atualizado em 18/06/2007 / Versão:
5.1.00/5055
Proteja o seu e-mail Terra: http://mail.terra.com.br/



______________________________________________
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