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