[firebase-br] FB1.5 - Inner Join ou SubSelect ?
eduardo
eduardo em icontroller.com.br
Seg Jul 25 19:18:15 -03 2005
Oi Sávio
> 1) Existe uma direfença grande de desempenho usando o inner join
> e/ou um SubSelect tipo :
>
> select p.codigo,
> p.descricao,
> p.id_fornec,
> select(f.nome from tbfornec f where f.id_fornec=p.id_fornec) as nome_fornec
> from tbproduto p order by p.codigo
>
> select p.codigo,
> p.descricao,
> p.id_fornec
> f.nome
> from tbproduto p
> inner join tbfornec f on (f.id_fornec=p.id_fornec)
> order by p.codigo
Praticamente não há diferença de performance. O importante é que vai
haver, em ambos os casos, 1 leitura em tbfornec para cada registro em
tbproduto e isso nivela a performance. Com o relacionamento em JOINS
você descreve melhor para o otimizador o que você pretende e isto pode
resultar em um PLANo mais adequado.
Eu, particularmente, utilizo subselects quando estes envolvem agregados
em diversas tabelas, onde a construção de JOINS fica muito extensa e/ou
o agrupamento fica difícil. Nestes casos, também acho que as queries
ficam mais auto-documentáveis, quero dizer, ficam mais fáceis de se ler,
uma vez que cada campo tem o seu SELECT isolado e muitas vezes, os
parâmetros passados poderão afetar somente um SUBSELECT e não os outros.
A minha opinião é que em casos simples como o que você passou, o
relacionamento com JOINs é mais adeqüado.
> 2) Quando se quer obter a lista de tbproduto p , mesmo que nao exista
> um id_fornec em tbfornec usa-se um subSelect, inner join ou left outer join ?
LEFT OUTER JOIN
[]s Eduardo
Mais detalhes sobre a lista de discussão lista