Muito boa explicação, obrigado! Em 19/05/2010 19:55, Mozart Hasse escreveu: > 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 > >
-- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. _______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral