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

Mateus F. Ricci | ORION Technology mateus.ricci em oriontechnology.com.br
Qui Jul 2 17:20:41 -03 2009


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





Mais detalhes sobre a lista de discussão lista