¿Diferencia entre Hash, Merge y Loop join?


40

En SQL Server puede especificar las sugerencias de combinación:

  • HASH JOIN
  • Unirse a Merge
  • LOOP JOIN

¿Cuál es la definición de esas tres sugerencias de combinación y cuándo se debe usar cada una?

Respuestas:


37

Desde MSDN, en el tema de Conceptos avanzados de ajuste de consultas :

SQL Server emplea tres tipos de operaciones de combinación:

  • Bucles anidados se une

  • La fusión se une

  • Hash se une

Si una entrada de unión es pequeña (menos de 10 filas) y la otra entrada de unión es bastante grande e indexada en sus columnas de unión, una unión de bucles anidados de índice es la operación de unión más rápida porque requieren la menor E / S y la menor cantidad de comparaciones. Para obtener más información sobre los bucles anidados, consulte Descripción de las uniones de bucles anidados.

Si las dos entradas de unión no son pequeñas pero están ordenadas en su columna de unión (por ejemplo, si se obtuvieron escaneando índices ordenados), una combinación de fusión es la operación de unión más rápida. Si ambas entradas de unión son grandes y las dos entradas son de tamaños similares, una combinación de fusión con clasificación previa y una combinación hash ofrecen un rendimiento similar. Sin embargo, las operaciones de unión hash suelen ser mucho más rápidas si los dos tamaños de entrada difieren significativamente entre sí. Para obtener más información, vea Comprender las combinaciones de fusión.

Las uniones de hash pueden procesar eficientemente entradas grandes, sin clasificar, no indexadas.

Pero creo que debería comenzar con un tema más básico: Ajuste de consultas y, por último, ir a usar las sugerencias de consulta.


55
De acuerdo, poner una sugerencia de combinación solo debe dejarse como último recurso (a veces útil si los datos estimados son significativamente diferentes de los datos reales).
Andrew Bickerton el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.