sql >> Base de Datos >  >> RDS >> Oracle

¿Cuál es la diferencia entre una combinación hash y una combinación de fusión (Oracle RDBMS)?

Una combinación de "clasificación de combinación" se realiza clasificando los dos conjuntos de datos que se unirán de acuerdo con las claves de combinación y luego fusionándolos. La fusión es muy barata, pero la ordenación puede ser prohibitivamente costosa, especialmente si la ordenación se derrama en el disco. El costo de la clasificación se puede reducir si se puede acceder a uno de los conjuntos de datos en orden a través de un índice, aunque acceder a una alta proporción de bloques de una tabla a través de un escaneo de índice también puede ser muy costoso en comparación con un escaneo de tabla completo. .

Una combinación hash se realiza mediante el hash de un conjunto de datos en la memoria en función de las columnas de combinación y leyendo el otro y sondeando la tabla hash en busca de coincidencias. La combinación hash tiene un costo muy bajo cuando la tabla hash se puede mantener completamente en la memoria, y el costo total asciende a muy poco más que el costo de leer los conjuntos de datos. El costo aumenta si la tabla hash tiene que volcarse al disco en una ordenación de un solo paso y aumenta considerablemente para una ordenación de varios pasos.

(En la versión anterior a 10g, las combinaciones externas de una tabla grande a una pequeña eran problemáticas en cuanto al rendimiento, ya que el optimizador no podía resolver la necesidad de acceder primero a la tabla más pequeña para una combinación hash, pero primero a la tabla más grande para una combinación externa. En consecuencia, las combinaciones hash no estaban disponibles en esta situación).

El costo de una combinación hash se puede reducir mediante la partición de ambas tablas en la(s) clave(s) de combinación. Esto permite al optimizador inferir que las filas de una partición en una tabla solo encontrarán una coincidencia en una partición particular de la otra tabla, y para las tablas que tienen n particiones, la unión hash se ejecuta como n uniones hash independientes. Esto tiene los siguientes efectos:

  1. Se reduce el tamaño de cada tabla hash, por lo que se reduce la cantidad máxima de memoria necesaria y se elimina potencialmente la necesidad de que la operación requiera espacio temporal en disco.
  2. Para las operaciones de consulta paralelas, la cantidad de mensajes entre procesos se reduce considerablemente, lo que reduce el uso de la CPU y mejora el rendimiento, ya que cada combinación hash puede ser realizada por un par de procesos PQ.
  3. Para operaciones de consulta no paralelas, el requisito de memoria se reduce en un factor de n, y las primeras filas se proyectan desde la consulta anterior.

Debe tener en cuenta que las uniones hash solo se pueden usar para uniones equitativas, pero las uniones de fusión son más flexibles.

En general, si está uniendo grandes cantidades de datos en una unión equitativa, una unión hash será una mejor apuesta.

Este tema está muy bien cubierto en la documentación.

http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i51523

12.1 documentos:https://docs.oracle.com/database/121/TGSQL/tgsql_join.htm