[firebase-br] RES: RES: Problemas Com "LEFT OUTER JOIN"

Eduardo Jedliczka jedyfb em gmail.com
Qui Jul 2 17:35:00 -03 2009


ainda não entendi exatamente o que você quer, mas então tenta este
aqui...

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 notas_pedido np
inner join pedito p on p.cod=np.pedido
inner join notas n on n.id=np.nota
where p.codcliente=2
order by p.data desc, p.cod

abraço

Em Qui, 2009-07-02 às 17:20 -0300, Mateus F. Ricci | ORION Technology
escreveu:
> Tentei com a sua e sem chance cara, demora muito mais que a minha... olha só
> 
> Plan
> PLAN (NP INDEX (PK_NOTAS_PEDIDOS))
> PLAN SORT (JOIN (P INDEX (FK_PEDIDO_1), N NATURAL))
> 
> Adapted Plan
> PLAN (NP INDEX (PK_NOTAS_PEDIDOS)) PLAN SORT (JOIN (P INDEX (FK_PEDIDO_1), N
> NATURAL))
> 
> ------ Performance info ------
> Prepare time = 0ms
> Execute time = 38m 14s 125ms
> Avg fetch time = 120.743,42 ms
> Current memory = 14.592.520
> Max memory = 15.495.156
> Memory buffers = 2.048
> Reads from disk to cache = 2.947
> Writes from cache to disk = 4
> Fetches from cache = 1.634.223.862
> 
> 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 16:18
> Para: FireBase
> Assunto: Re: [firebase-br] RES: Problemas Com "LEFT OUTER JOIN"
> 
> 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
> ______________________________________________
> 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