0Pricing
SQL Academy · Aula

Junção por hash vs junção por intercalação vs loop aninhado

Reconheça as três principais estratégias de junção, seus perfis de custo e quando cada uma é a melhor escolha do planejador.

Junção por hash vs junção por intercalação vs loop aninhado é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

Três Estratégias de Junção

PostgreSQL tem três algoritmos físicos de junção:

  • Junção aninhada — para cada linha externa, faz a varredura da parte interna
  • Junção por hash — cria um hash da parte interna e consulta-o com a parte externa
  • Junção por mesclagem — ordena ambos os lados e os mescla em paralelo

Junção Aninhada

A mais simples: parte externa × parte interna. É rápida quando a parte interna tem um bom índice E a parte externa é pequena:

EXPLAIN ANALYZE
SELECT * FROM users u JOIN orders o ON o.user_id = u.id
WHERE u.id = 42;
-- Nested Loop
--   -> Index Scan on users where id = 42  (rows=1)
--   -> Index Scan on orders_user_id_idx    (rows=5)

Quando a Junção Aninhada Vence

Se o lado externo tem poucas linhas E o lado interno tem um índice na chave de junção, a junção aninhada é extremamente rápida. Pior caso: O(externa × interna).

Junção por Hash

Cria uma tabela hash em um dos lados (geralmente o menor) e depois consulta-a com o outro. É excelente para unir duas tabelas grandes quando não existe um índice útil na chave de junção:

EXPLAIN ANALYZE
SELECT * FROM big_a a JOIN big_b b ON a.key = b.key;
-- Hash Join (cost=10000..50000)
--   -> Seq Scan on big_a
--   -> Hash
--       -> Seq Scan on big_b

Quando a Junção por Hash Vence

Duas tabelas médias ou grandes, sem um bom índice na chave de junção, ou quando o planejador precisa de muitas linhas. Limitada pela memória: a tabela hash precisa caber em work_mem ou será transferida para o disco.

Junção por Mesclagem

Ambos os lados são ordenados pela chave de junção e percorridos juntos. É excelente quando os dois lados já estão ordenados (por exemplo, por um índice compatível):

EXPLAIN ANALYZE
SELECT * FROM big_a a JOIN big_b b ON a.key = b.key
ORDER BY a.key;
-- Merge Join
--   -> Index Scan on big_a (a.key ASC)
--   -> Index Scan on big_b (b.key ASC)

Quando a Junção por Mesclagem Vence

Duas entradas grandes e previamente ordenadas. Varredura linear, pouca memória. O custo da ordenação é importante — se ambos os lados precisarem de ordenação explícita, a junção por hash geralmente vence.

Escolhendo entre Elas

O planejador escolhe com base em:

  • Quantidades estimadas de linhas
  • Índices disponíveis
  • Memória (work_mem)
  • Constantes de custo em postgresql.conf

Forçando uma Estratégia Apenas para Diagnóstico

Para depuração, você pode desabilitar estratégias:

SET enable_hashjoin = off;
SET enable_mergejoin = off;
SET enable_nestloop = off;
-- Re-run EXPLAIN to see what the planner picks instead.
-- NEVER persist these in production.

Transferência para o Disco

Se a tabela hash ou a ordenação exceder work_mem, o operador transfere arquivos temporários para o disco — muito mais lentamente. Aumente work_mem ou reescreva a consulta.

Junções Paralelas

PostgreSQL pode paralelizar a junção por hash e a junção por mesclagem (além de varreduras sequenciais e de índice) — isso aparece como Parallel Hash Join com Workers Planned em EXPLAIN.

Interpretando a Escolha

Em EXPLAIN ANALYZE, o nome do nó de junção informa a estratégia. A escolha quase sempre é correta — quando não for, concentre-se nas estatísticas e nos índices antes de forçar estratégias.

Recapitulação

As três estratégias de junção atendem a diferentes formatos.

  • Junção aninhada: parte externa pequena + parte interna indexada
  • Hash: tabelas grandes, sem índice útil
  • Mesclagem: entradas previamente ordenadas

Verificação Rápida

Você está unindo duas tabelas com 10 milhões de linhas por uma coluna sem índice. Qual algoritmo de junção o planejador provavelmente escolherá?

Perguntas Frequentes

A aula “Junção por hash vs junção por intercalação vs loop aninhado” é grátis?

Sim — o texto completo de “Junção por hash vs junção por intercalação vs loop aninhado” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “Junção por hash vs junção por intercalação vs loop aninhado”?

Reconheça as três principais estratégias de junção, seus perfis de custo e quando cada uma é a melhor escolha do planejador. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Junção por hash vs junção por intercalação vs loop aninhado”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Lendo EXPLAIN e EXPLAIN ANALYZE
  2. Varreduras sequenciais vs varreduras por índice
  3. Junção por hash vs junção por intercalação vs loop aninhado
  4. Identificação e correção de consultas lentas
← Voltar para SQL Academy