query lenta

Firebird

05/08/2009

olá pessoal... estou com problema em uma query aqui... quando o software foi desenvolvido e a base de dados era pequena, a query rodava numa boa... mas tem um cliente agora com a base enorme... e quando puxo esse relatório, o sistema trava...

select C.CPF, C.NUM_CARTAO, C.NOME, C.ENDER, C.BAIRRO, C.CIDADE, C.UF, C.CEP, 
C.TEL1, C.TEL2, C.TELC, C.TEL1EMP, sum(P.VLRPREST) as vlrprest
from CLIENTES C, PRESTACOES P, LOJAS L  
where C.CPF = P.CPF and P.CODLOJA in (25) and L.COD = P.CODLOJA and P.DTPAGTO is null
and P.DTVENC >= :DTVENCINICIO and P.DTVENC <= :DTVENCFINAL 

and NOT EXISTS (select P2.CODLOJA from PRESTACOES P2 where P2.CODLOJA = P.CODLOJA 
and P2.NUMREF = P.NUMREF and P2.DTPAGTO is null and P2.DTVENC < P.DTVENC)

group by C.CPF, C.NUM_CARTAO, C.NOME, C.ENDER, C.BAIRRO, C.CIDADE, C.UF, C.CEP,
C.TEL1, C.TEL2, C.TELC, C.TEL1EMP order by C.NOME


o que deixa lento e o NOT EXISTS pois busca a tabela toda a cada registro que consulta

alquem sabe como posso melhorar essa query?


Brainrj

Brainrj

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

05/08/2009

a sua tabela p2 não deveria relacionar também o CPF ?


GOSTEI 0
Brainrj

Brainrj

05/08/2009

eu acho que não é necessario
o campo p.numref e o numero do contrato... ele é unico e ja esta vinculado ao cliente

concorda?


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

05/08/2009

então veja se será necessário criar índices para as tabelas...

clientes
--------
cpf, nome

prestacoes
----------
codloja, cpf, dtvenc, dtpagto, numref

lojas
-----
cod


GOSTEI 0
POSTAR