[firebase-br] ajuda para query
Alberto Brito
comercial em abritolda.com
Ter Jun 19 12:30:25 -03 2007
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
Mais detalhes sobre a lista de discussão lista