[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