[firebase-br] Subselects ou Left Joins
Eduardo Jedliczka
edujed em gmail.com
Qui Maio 19 21:43:07 -03 2005
é chará...
Experiências assim enriquecem muito esta lista...
Na GeraSoft optamos em ficar com o FB 1.0.2.821 (embora tenhamos realizado
alguns testes com o FB 1.5.0) e migrar diretamente para o FB 2.0, então
entendemos bem como o Pessimizador (digo, otimizador) do FB 1.0 e 1.5 pode
ajudar um select.
[s]
======================
Eduardo Jedliczka
Apucarana - Paraná
======================
----- Original Message -----
From: "eduardo" <eduardo em icontroller.com.br>
To: <lista em firebase.com.br>
Sent: Thursday, May 19, 2005 9:12 PM
Subject: Re: [firebase-br] Subselects ou Left Joins
> Oi RAMJ
>
> Desculpe a demora na resposta.
>
> Estou fazendo testes com uma tabela com 2 milhões de registros.
>
> Bem, naturalmente vc não está querendo carregar todos ao mesmo tempo né!?
> Eu tenho resultados excelentes com subselects - utilizo bastante.
> Cada caso é um caso. Acho que vc deveria utilizar o IBPlanAlyzer ou
> outra ferramenta semelhante para avaliar o tempo de resposta e também a
> quantidade de leituras que cada opção te dá.
> 2 milhões de registros parec assustador, mas não é. Depende de quantos
> destes 2 milhões você vai trazer no teu Result Set.
> Tenho aqui tabelas com 3,5 milhões de registros e, com o índice
> adequado, ele localiza um Set de 10 com a mesma (ou humanamente
> perceptível) a mesma performance.
>
> Se o volume de linhas do ResultSet for grande, acho que os SubSelects te
> darão melhor performance, pois ele usará o índice para montar o Result e
> não terá quew ordená-lo na memória. Se for pequeno, bem, coisa pequena
> tanto faz.
>
> Sabe aquela tabela de 3,5 milhões que eu tenho aqui? Montei um query com
> dois campos no SubSelect e o Resultado veio em 15 milisegundos num
> K8/512 com DBExpress. Claro, o DataSet é unidirecional com PackedRecords
> de 50. Verificando a quantidade de leituras em disco, logicamente, para
> cada leitura na tabela principal, ele faz duas na que tem os subselects.
>
> O mesmo Result com LEFT JOIN está congelado enquanto te escrevo, pois
> ele vai ter que ordenar o resultado na memória e 3,5 Milhões de linhas
> na memória é bravo.
>
> Assim, acho melhor os subselects. Só não esqueça de utilizar índices
> adeqüados na tabela secundária.
>
> Espero ter ajudado
>
> []s Eduardo
>
> > Join, o Firebird não utiliza o Plan pelo indice razao, porém usando
> > subselects, ele consegue utilizar o Plan pelo campo.
> >
> > Reuber
> >
> > Eduardo Jedliczka escreveu:
> >
> >> Marcel,
> >>
> >> Nem sempre um Inner/Left/Right Join é mais rápido do que um
Sub-Select...
> >>
> >> Há vários casos (já fizemos muitos testes por aqui) que um sub-select
> >> gera
> >> um Plan muito melhor... Este abaixo aparenta ser um destes, mas como
> >> não sei
> >> qual é a composição do índice "Razao" então não posso opnar muito, E
> >> também
> >> não sei qual a "grandeza" das tabelas, não dá para dizer se o plan
> >> escolhido
> >> pelo FB é tão pior que o desejado...
> >>
> >> Subselects, são mais perigosos (entenda - muito lentos) quando estão no
> >> Where... Quando estão na lista de campos, o FB é bem espertinho...
> >>
> >> [s]
> >>
> >> ==========================
> >> Eduardo Jedliczka
> >> Gerasoft Informática
> >> Apucarana - Pr
> >> ==========================
> >>
> >> ----- Original Message ----- From: "Moked do Brasil - Marcel (Brazil)"
> >> <marcel em moked.com.br>
> >> To: "FireBase" <lista em firebase.com.br>
> >> Sent: Wednesday, May 18, 2005 4:26 PM
> >> Subject: Re: [firebase-br] Subselects ou Left Joins
> >>
> >>
> >>
> >>
> >>> No primeiro select por ele não estar trazendo os dados corretamento
pode
> >>>
> >>
> >> ser
> >>
> >>
> >>> por causa do Left Join pois isto implica que ele traga todos os dados
do
> >>> campo a esquerda independente do campo a direito tenta o inner join!!!
> >>> E muito melhor um inner join, left join, right join do que uma
SubQuery
> >>>
> >>
> >> pois
> >>
> >>
> >>> a performance obtida na SubQuery é concerteza inferior a da
performance
> >>>
> >>
> >> com
> >>
> >>
> >>> Join.
> >>>
> >>> ----- Original Message ----- From: "RAMJ SISTEMAS & CONSULTORIA"
> >>> <jubrovolski em yahoo.com.br>
> >>> To: "FireBase" <lista em firebase.com.br>
> >>> Sent: Wednesday, May 18, 2005 4:10 PM
> >>> Subject: [firebase-br] Subselects ou Left Joins
> >>>
> >>>
> >>>
> >>>
> >>>> Olá Pessoal
> >>>>
> >>>> Sei que este assunto já foi tratado aqui, mas estou num impasse.
> >>>> Desenvolvi 3 sistemas grandes usando Left Joins para para o
> >>>>
> >>
> >> relacionamento
> >>
> >>
> >>>> entre as tabelas. Porém aprofundando mais meus conhecimentos, notei
que
> >>>>
> >>
> >> o
> >>
> >>
> >>>> firebird não está usando o PLAN corretamente para selecionar o indice
> >>>> correto para o retorno de dados.
> >>>> Ex:
> >>>> SELECT E.CODCLI
> >>>> , E.RAZAO
> >>>> , D.NOME
> >>>> FROM CLIENTES E
> >>>> left join PROPRIETARIOS D ON (D.CODPROP=E.CODPROP)
> >>>> ORDER BY E.RAZAO
> >>>>
> >>>> mesmo existindo um indice por RAZAO o firebird não usa este indice no
> >>>> PLAN.
> >>>> Porém quando uso:
> >>>> SELECT E.CODCLI
> >>>> , E.RAZAO
> >>>> , E.CODPROP
> >>>> , (SELECT D.NOME FROM PROPRIETARIOS WHERE D.CODPROP=E.CODPROP) AS
> >>>> NOMEPROP
> >>>> FROM CLIENTES E
> >>>> ORDER BY E.RAZAO
> >>>> o firebird utiliza o PLAN usando o indice pelo campo RAZAO
> >>>>
> >>>> 1ª pergunta: Posso deixar como esta o BD que este problema será
> >>>> solicionado no Firebird 2.0 ou seria melhor "arrumar" tudo o que está
> >>>> pronto?
> >>>> 2ª pergunta: Quando realmente deverá sair a versão final do 2.0?
> >>>>
> >>>> Reuber
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> ______________________________________________
> >>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> >>>> Para editar sua configuração na lista, use o endereço
> >>>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> >>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >>>>
> >>>>
> >>>>
> >>>
> >>>
> >>> ______________________________________________
> >>> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> >>> Para editar sua configuração na lista, use o endereço
> >>>
> >>
> >> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> >>
> >>
> >>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >>>
> >>>
> >>>
> >>
> >>
> >>
> >> ______________________________________________
> >> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> >> Para editar sua configuração na lista, use o endereço
> >> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> >> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >>
> >> __________ Informação do NOD32 1.1100 (20050518) __________
> >>
> >> Esta mensagem foi verificada pelo NOD32 Sistema Antivírus
> >> http://www.nod32.com.br
> >>
> >>
> >>
> >>
> >>
> >
> >
> >
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> > Para editar sua configuração na lista, use o endereço
> > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista