[firebase-br] RES: Problemas Com "LEFT OUTER JOIN"
Eduardo Jedliczka
edujed em gmail.com
Qui Jul 2 16:18:13 -03 2009
o problema é que a tablea Nota Pedido está AS NATURAL, pois você não
deve ter um índice APENAS para o campo pedido.
abaixo eu estou alterando o seu select (ele irá trazer resultados
diferente do atual caso haja mais várias notas para vários pedidos, mas
deve ser muito mais rápido...)
select p.cod, p.data, p.total, case p.status
when 0 then 'ABERTO'
when 1 then 'ENTREGUE'
when 2 then 'ENTREGUE E RECEBIDO'
when 3 then 'RECEBIDO'
when 4 then 'ENCERRADO'
end as status,
n.nf,
n. emissao
from pedito p
left outer join notas n on exists (select first 1 np.nota from notas_pedido np where p.cod=np.pedido and n.id=np.nota)
where p.codcliente=2
order by p.data desc, p.cod
Abraço
Em Qui, 2009-07-02 às 15:52 -0300, Mateus F. Ricci | ORION Technology escreveu:
> PLAN gerado é o seguinte:
> Plan
> PLAN JOIN (SORT (JOIN (P INDEX (FK_PEDIDO_1), NP NATURAL)), N INDEX
> (PK_NOTAS))
>
> Adapted Plan
> PLAN JOIN (SORT (JOIN (P INDEX (FK_PEDIDO_1), NP NATURAL)), N INDEX
> (PK_NOTAS))
>
> Os índices são:
> Na tabela Pedido no campo COD (PK) e tem 3 (FK)
> Na Tabela Notas_Pedidos no campo NOTA e no campo PEDIDO tem (PK)
> Na tabela Notas no campo ID (PK)
>
> A versão do firebird é:
> 2.1.1.17910
>
> Abraço
>
> Mateus Felipe Ricci
> ________________________________________________________
> ORION Technology - www.oriontechnology.com.br
> Sistemas de Gestão e Controle Empresarial - Assistência Técnica - Redes
> STelefone: (19) 3308-8838 / (19) 9274-9792
> /E-mail: mateus.ricci em oriontechnology.com.br
> EMSN: mateusricci_ti em hotmail.com.br
>
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
> nome de Eduardo Jedliczka
> Enviada em: quinta-feira, 2 de julho de 2009 14:59
> Para: FireBase
> Assunto: Re: [firebase-br] Problemas Com "LEFT OUTER JOIN"
>
> qual é o PLAN gerado pelo firebird ?
>
> outra coisa, quais índices existem nestas tabelas (pks, fk, etc...)
>
> qual é a versão do firebird usada ?
>
> abraço
>
> Em Qui, 2009-07-02 às 14:00 -0300, Mateus F. Ricci | ORION Technology
> escreveu:
>
> > Olá, está ocorrendo um problemão aqui comigo... por favor, me ajudem...
> >
> >
> >
> > Coloco a seguinte instrução: (nas tabelas existem muitos registros: pedido
> =
> > 49.627, Notas = 7.111, Notas_Pedidos = 27.088) e a instrução retorna
> 45.314
> > registros
> >
> > select
> >
> > p.cod,
> >
> > p.data,
> >
> > p.total,
> >
> > case p.status
> >
> > when 0 then 'ABERTO'
> >
> > when 1 then 'ENTREGUE'
> >
> > when 2 then 'ENTREGUE E RECEBIDO'
> >
> > when 3 then 'RECEBIDO'
> >
> > when 4 then 'ENCERRADO'
> >
> > end as status,
> >
> > n.nf,
> >
> > n.emissao
> >
> > from
> >
> > pedido p left outer join notas_pedidos np on (p.cod = np.pedido) left
> > outer join notas n on (n.id = np.nota)
> >
> > where
> >
> > p.codcliente = 2
> >
> > order by
> >
> > p.data desc,
> >
> > p.cod
> >
> >
> >
> > ------ Performance info ------
> >
> > Prepare time = 47ms
> >
> > Execute time = 18m 41s 562ms
> >
> > Avg fetch time = 59.029,58 ms
> >
> > Current memory = 15.351.072
> >
> > Max memory = 15.352.932
> >
> > Memory buffers = 2.048
> >
> > Reads from disk to cache = 2.587
> >
> > Writes from cache to disk = 0
> >
> > Fetches from cache = -1.840.952.896
> >
> >
> >
> > Porém, a mesma instrução com os mesmos dados no ORACLE retorna os dados em
> > menos de 3 segundos
> >
> >
> >
> > Como resolver isso no firebird...
> >
> >
> >
> > Se precisarem, eu mando a minha base de dados pra vocês, mas preciso
> urgente
> > resolver isso no firebird...
> >
> >
> >
> > Muito obrigado
> >
> >
> >
> > Mateus Felipe Ricci
> >
> >
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista