Benedito,

>   Não sei se minha pergunta é boba, mas:
>    Porque fazer desse jeito é mais eficiente do que fazer um LEFT JOIN?

A pergunta não é boba não, na realidade a explicação não é nada trivial.
A resposta mais simples e curta que posso dar é: esse jeito (UNION ALL + 
INNER + NOT EXISTS) é mais eficiente porque o otimizador não tem 
inteligência suficiente para notar que são equivalentes.
Em alguns casos simples, alguns bancos de dados fazem a conversão 
automaticamente e procuram por um plano otimizado. Em casos mais 
complicados, nem todo otimizador consegue.

Talvez para você ainda reste a pergunta "tá mas por quê fazer 4 unions é 
mais rápido que um OUTER?". Neste caso a resposta também não é trivial:
É que ao dividir a consulta em 4 menores, o servidor pode usar um índice 
diferente (muitas vezes de uma das tabelas filhas) para cada uma das 
subconsultas ao invés de percorrer a tabela principal sequencialmente. É 
exatamente essa habilidade de escolher índices pelo volume da tabela filha 
que pode tornar a consulta infinitamente mais rápida.

Atenciosamente,

Mozart Hasse 


_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Reply via email to