Descripción de las combinaciones hash
La combinación hash tiene dos entradas: la entrada de generación y la entrada de sondeo. El optimizador de consultas asigna estas reglas de forma que la entrada más pequeña sea la entrada de generación.
Las combinaciones hash se utilizan para muchos tipos de operaciones de coincidencia de conjuntos: combinación interna; combinación externa completa, izquierda y derecha; semicombinación izquierda y derecha; intersección; unión y diferencia. Además, una variante de la combinación hash puede realizar la eliminación duplicada y el agrupación, como SUM(salario) GROUP BY departamento. Estas modificaciones sólo utilizan una entrada para las funciones de generación y sondeo.
En las secciones siguientes se describen los distintos tipos de combinaciones hash: combinación hash en memoria, combinación hash aplazada y combinación hash recursiva.
Combinación hash en memoria
La combinación hash primero recorre o calcula la entrada de generación completa y, a continuación, genera una tabla hash en memoria. Cada fila se inserta en un cubo hash según el valor hash calculado para la clave hash. Si la entrada de generación completa es menor que la memoria disponible, se pueden insertar todas las filas en la tabla hash. Después de la fase de generación se produce la fase de sondeo. La entrada de sondeo completa se recorre o se calcula fila a fila y, por cada fila de sondeo, se calcula el valor de la clave hash, se recorre el cubo hash correspondiente y se obtienen las coincidencias.
Combinación hash aplazada
Si la entrada de generación no cabe en la memoria, la combinación hash se realiza en varios pasos. Esto se denomina combinación hash aplazada. Cada paso contiene una fase de generación y una fase de sondeo. Inicialmente, se procesan todas las entradas de generación y sondeo, y se crean particiones (con una función hash sobre las claves hash) en varios archivos. La utilización de la función hash sobre las claves hash garantiza que todos los pares de registros combinados estén en la misma pareja de archivos. Por tanto, la tarea de combinar dos grandes entradas se ha reducido a varias instancias más pequeñas de las mismas tareas. A continuación se aplica la combinación hash a cada pareja de archivos de la partición.
Combinación hash recursiva
Si la entrada de generación es tan grande que las entradas para una mezcla externa estándar requerirían varios niveles de mezcla, son necesarios varios pasos de particiones y varios niveles de particiones. Si sólo algunas de las particiones son grandes, los pasos de particiones adicionales sólo se utilizan para estas particiones específicas. Para que todos los pasos de las particiones sean lo más rápidos posible, se utilizan grandes operaciones asincrónicas de E/S de forma que un solo subproceso pueda mantener ocupadas varias unidades de disco.
[!NOTA]
Si la entrada de generación sólo es un poco más grande que la memoria disponible, se combinan elementos de una combinación hash en memoria y una combinación hash aplazada en un solo paso, para producir una combinación hash híbrida.
Durante la optimización, no siempre se puede determinar qué combinación hash se utiliza. Por tanto, SQL Server comienza utilizando una combinación hash en memoria y, gradualmente, pasa a una combinación hash aplazada y a una combinación hash recursiva, según el tamaño de la entrada de generación.
Si el optimizador prevé erróneamente cuál de las dos entradas será más pequeña y, por tanto, debería haber sido la entrada de generación, se invierten dinámicamente las funciones de generación y sondeo. La combinación hash se asegura de usar el archivo de desbordamiento menor como entrada de generación. Esta técnica se denomina inversión de funciones. La inversión de funciones tiene lugar en una combinación hash después de al menos un volcado en el disco.
[!NOTA]
La inversión de funciones funciona independientemente de cualquier estructura o sugerencia de consulta. La inversión de funciones no se muestra en el plan de consulta; cuando se lleva a cabo, resulta transparente para el usuario.
Salida hash
El término salida hash algunas veces se utiliza para describir combinaciones hash aplazadas o recursivas.
[!NOTA]
Las combinaciones hash recursivas o las salidas hash reducen el rendimiento del servidor. Si ve muchos eventos Hash Warning en una traza, actualice las estadísticas en las columnas que se están combinando.
Para obtener más información sobre el salida hash, vea Hash Warning (clase de evento).
Vea también