[firebase-br] Ajuda em SELECT

Carlos H. Cantu listas em warmboot.com.br
Qua Out 27 14:27:12 -03 2010


Vc vai ter que analisar o PLAN desse select, e ver se o Firebird está
usando os índices corretos quando possível.

De antemão, eu substituiria:

(EXTRACT(YEAR FROM NS.DATA_DOCUMENTO) = 2010) AND
(EXTRACT(MONTH FROM NS.DATA_DOCUMENTO) = 1) AND

por

ns.datadocumento between '1.1.2010' and '31.1.2010'

e me certificaria que existe um indice criado para esse campo.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

SN> Pessoal,

SN> Este select abaixo está demorando 19 min (isto mesmo MINUTOS)

SN> SELECT NSI.ESPECIE_DOCUMENTO, NSI.SERIE_SUBSERIE, NSI.NUMERO_DOCUMENTO,
SN> NS.CLI_CODIGO, NSI.CFOP_CODIGO, NSI.ICMS_ALIQUOTA, NSI.CST_CODIGO,
SN> CLI.CLI_CNPJ, CLI.CLI_IE, NS.DATA_DOCUMENTO, CMB.UF_CODIGO,
SN> EDF.ESPECIE_DOC_FISC_SINTEGRA,
SN> SUM(NSI.NFE_BC_ICMS)    AS BC_ICMS,     SUM(NSI.NFE_VLR_ICMS)     AS
SN> VLR_ICMS,     SUM(NSI.NFE_BC_ICMS_ST) AS BC_ICMS_ST,
SN> SUM(NSI.NF_VLR_ICMS_ST) AS VLR_ICMS_ST, SUM(NSI.NFE_VLR_IPI)      AS
SN> VLR_IPI,      SUM(NSI.NFE_VLR_TOTAL)  AS VALOR_MERC,
SN> SUM(NSI.NFE_VLR_FRETE)  AS VALOR_FRETE, SUM(NSI.NFE_VLR_SEGURO)   AS
SN> VALOR_SEGURO, SUM(NSI.NFE_VLR_ODA)    AS VLR_ODA,
SN> SUM(NSI.NFE_VALOR_REDUCAO_BC) AS RED_BC
SN> FROM NF_SAIDAS_ITENS NSI
SN> JOIN NF_SAIDAS NS ON (NSI.EMP_CODIGO = NS.EMP_CODIGO AND
SN> NSI.ESPECIE_DOCUMENTO = NS.ESPECIE_DOCUMENTO AND NSI.SERIE_SUBSERIE =
SN> NS.SERIE_SUBSERIE AND NSI.NUMERO_DOCUMENTO = NS.NUMERO_DOCUMENTO)
SN> JOIN CLIENTES CLI ON (NS.CLI_CODIGO = CLI.CLI_CODIGO)
SN> JOIN ESPECIES_DOCUMENTOS_FISCAIS EDF ON (EDF.ESPECIE_DOCUMENTO =
SN> NSI.ESPECIE_DOCUMENTO)
SN> JOIN CMB ON (CLI.CMB_CODIGO = CMB.CMB_CODIGO)
SN> WHERE (NSI.EMP_CODIGO = 1) AND
SN> (EXTRACT(YEAR FROM NS.DATA_DOCUMENTO) = 2010) AND
SN> (EXTRACT(MONTH FROM NS.DATA_DOCUMENTO) = 1) AND
SN> (NSI.ESPECIE_DOCUMENTO NOT IN ('CTR   ', 'CTRC  ', 'NFCEE', 'NFCFGC',
SN> 'NFCFAC'))
SN> GROUP BY NSI.ESPECIE_DOCUMENTO, NSI.SERIE_SUBSERIE, NSI.NUMERO_DOCUMENTO,
SN> NS.CLI_CODIGO, NSI.CFOP_CODIGO, NSI.ICMS_ALIQUOTA, CST_CODIGO, CLI.CLI_CNPJ,
SN> CLI.CLI_IE, NS.DATA_DOCUMENTO, CMB.UF_CODIGO, EDF.ESPECIE_DOC_FISC_SINTEGRA

SN> O total de registros nas tabelas é de:
SN> - NSI 33.923
SN> - NS  17.976
SN> - CLI  5.219
SN> - EDF     27
SN> - CMB  5.566

SN> (o retorno do select é de aproximadamente 1.000 registros):

SN> São poucos como podem ver. Alguém tem como me ajudar ?





Mais detalhes sobre a lista de discussão lista