Diferença entre junção Hash, Merge e Loop?


40

No SQL Server, você pode especificar as dicas de junção:

  • HASH JOIN
  • MERGE JOIN
  • LOOP JOIN

Qual é a definição dessas três dicas de junção e quando cada uma deve ser usada?

Respostas:


37

No MSDN, no tópico de Conceitos avançados de ajuste de consulta :

O SQL Server emprega três tipos de operações de junção:

  • Junções aninhadas

  • Mesclar junções

  • Associações de hash

Se uma entrada de junção for pequena (menos de 10 linhas) e a outra entrada de junção for bastante grande e indexada em suas colunas de junção, uma junção de loops aninhados ao índice é a operação de junção mais rápida, pois exige o mínimo de E / S e o menor número de comparações. Para obter mais informações sobre loops aninhados, consulte Noções básicas sobre junções de loops aninhados.

Se as duas entradas de junção não forem pequenas, mas estiverem classificadas em sua coluna de junção (por exemplo, se foram obtidas pela varredura de índices classificados), uma junção de mesclagem é a operação de junção mais rápida. Se ambas as entradas de junção forem grandes e as duas entradas tiverem tamanhos semelhantes, uma junção de mesclagem com classificação anterior e uma junção de hash oferecerão desempenho semelhante. No entanto, as operações de junção de hash geralmente são muito mais rápidas se os dois tamanhos de entrada diferem significativamente um do outro. Para obter mais informações, consulte Noções básicas sobre junções de mesclagem.

As junções de hash podem processar com eficiência entradas grandes, não classificadas e não indexadas.

Mas acredito que você deve começar com um tópico mais básico: Ajuste de Consulta e, por último, usar as dicas de consulta.


5
Concordado, colocar uma dica de junção deve ser deixado apenas como último recurso (às vezes útil se os dados estimados forem significativamente diferentes dos dados reais).
Andrew Bickerton
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.