Pessoal, estava pensando aqui com meus botões e analisando os seguintes selects

Primeiro select:

select z.codigo, z.nome, z.valor from(
    select a.codigo, a.nome, b.valor from clientes a
    inner join receber b on(b.codigo = a.codigo)
    where (a.codigo < 1234)
    union all
    select c.codigo, c.nome, d.valor from convenios c
    inner join receber d on(d.codigo = c.codigo)
    where (c.codigo < 1234)
) as z


Segundo select:

select z.codigo, z.nome, x.valor from(
    select a.codigo, a.nome from clientes a
    union all
    select c.codigo, c.nome from convenios c
) as z
inner join receber x on(x.codigo = z.codigo)
where (z.codigo < 1234)


Veja que os dois select trazem os mesmos resultados, 
a diferença é que no primeiro temos um inner join para cada tabela 
e no segundo temos o inner join cruzado com o resultado do union

Duvida: Estes select estão corretos, ou há algo que possa ser melhorado aí?
Se os dois estão corretos, qual seria o mais apropriado em termos de 
performance?

Minha visão: 

O primeiro me parece que traria menos registros para serem comparados visto que 
ele bloqueia ja no select interno dessa forma sendo mais eficiente
O segundo teria que verificar todos o conteudo de A + C para depois filtrar no 
where externo
Ou será que o postgres seria “inteligente” o suficiente pra trazer somente os 
registros que interessa no segundo select mesmo com o inner join externo?

Bem... não sei ao certo como o postgres se comportaria em cada caso


Marcelo Silva
------------------------------------------
msn: [email protected]
Cel.: (11) 9693-4251
Cel.: (11) 5250-1407
Desenvolvedor Delphi, PHP, ASP
Empresa: Perfil "Medicina e Segurança do Trabalho"

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a