¿Cuáles son las ganancias/pérdidas de rendimiento entre las combinaciones de hash y las combinaciones de combinación, específicamente en Oracle RDBMS?¿Cuál es la diferencia entre una combinación hash y una combinación merge (RDBMS de Oracle)?
Respuesta
Una unión "sort merge" se realiza ordenando los dos conjuntos de datos que se unirán de acuerdo con las claves de combinación y luego combinándolos. La fusión es muy barata, pero el tipo puede ser prohibitivamente caro, especialmente si el género se derrama en el disco. El costo del tipo puede reducirse si se puede acceder a uno de los conjuntos de datos en orden ordenado mediante un índice, aunque acceder a una gran proporción de bloques de una tabla mediante un escaneo de índice también puede ser muy costoso en comparación con un escaneo completo de tabla .
Una combinación de hash se realiza mezclando un conjunto de datos en la memoria en base a columnas de unión y leyendo el otro y probando la tabla de mezcla para buscar coincidencias. La combinación de hash es de muy bajo costo cuando la tabla de hash se puede mantener por completo en la memoria, con un costo total que asciende a muy poco más que el costo de leer los conjuntos de datos. El costo aumenta si la tabla hash tiene que ser derramada en el disco en una clasificación de una sola pasada, y aumenta considerablemente para una ordenación multipaso.
El costo de una combinación hash se puede reducir mediante la partición de ambas tablas en la (s) clave (s) de unión. Esto permite que el optimizador infiera 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 combinaciones de hash independientes. Esto tiene los siguientes efectos:
- Se reduce el tamaño de cada tabla hash, por lo tanto, se reduce la cantidad máxima de memoria necesaria y se elimina la necesidad de que la operación requiera espacio temporal en el disco.
- Para operaciones de consulta en paralelo, la cantidad de mensajes entre procesos es muy reducida, lo que reduce el uso de la CPU y mejora el rendimiento, ya que cada combinación de hash se puede realizar mediante un par de procesos PQ.
- Para operaciones de consulta no paralelas, el requisito de memoria se reduce por 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 equi-uniones, pero las uniones fusionadas son más flexibles.
En general, si está uniendo grandes cantidades de datos en un equi-join, una combinación de hash va a ser una mejor opción.
Este tema está muy bien cubierto en la documentación.
http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i51523
Solo quiero editar esto para la posteridad que las etiquetas para el oráculo no se agregaron cuando respondí esta pregunta. Mi respuesta fue más aplicable a MS SQL.
Merge join es lo mejor posible ya que explota la ordenación, lo que da como resultado un solo pase por las tablas para hacer la unión. SI tiene dos tablas (o índices que cubren) que hacen que su pedido sea el mismo, como una clave principal y un índice de una tabla en esa clave, se produciría una unión combinada si realizara esa acción.
La combinación Hash es la siguiente mejor, como suele hacerse cuando una tabla tiene un número pequeño (relativamente) de elementos, está creando efectivamente una tabla temporal con hashes para cada fila que luego se busca continuamente para crear la unión.
El peor caso es el bucle anidado que es orden (n * m) lo que significa que no hay orden o tamaño para explotar y la unión es simplemente, para cada fila en la tabla x, tabla de búsqueda y para las uniones.
Si uno fuera siempre mejor que el otro, entonces el otro nunca sería usado, ¿no crees? Creo que la diferencia es más compleja que esto. –
Perdón si me malinterpretaste. Estaba tratando de describir los tipos de uniones y por qué es mejor combinarlas. El problema es que merge join solo funciona si tiene un orden de clasificación para explotar y una combinación de hash solo es más eficiente cuando la tabla unida tiene una cantidad relativamente pequeña de filas. Disculpas si eso no estaba claro en la respuesta. – Spence
Loops anidados es lo peor, por supuesto, cuando no es posible nada más. – Spence
- 1. Diferencia entre la combinación izquierda y la combinación externa izquierda
- 2. Diferencia entre la unión de bucle anidado y la combinación de hash en SQL Server 2008
- 3. Hash de combinación/concatenación
- 4. Combinación de fusiones en una sola combinación
- 5. ¿Cuál es la diferencia entre persist() y merge() en Hibernate?
- 6. ¿Cuál es la diferencia entre std :: merge y std :: set_union?
- 7. Combinación de valores hash MD5
- 8. ¿Cuál es la diferencia entre una referencia hash y hash en Perl?
- 9. ¿Cuál es la diferencia entre matrices y hash?
- 10. En PHP, ¿cuál es la diferencia entre hash y mhash?
- 11. ¿Cuál es la diferencia entre dict() y {}?
- 12. ¿Cuál es la diferencia entre una base de datos y un depósito de datos?
- 13. ¿Cuál es la diferencia entre una vista y una secuencia?
- 14. ¿Cuál es la diferencia entre una subrutina y una función?
- 15. Eliminar la combinación izquierda en Oracle 10g
- 16. ¿Cuál es la diferencia entre una sesión y una cookie?
- 17. ¿cuál es la diferencia entre una clase y una biblioteca?
- 18. ¿Por qué una combinación de 3 vías es ventajosa en una combinación de 2 vías?
- 19. ¿La combinación interna es igual que la combinación equi?
- 20. ¿Qué diferencia hay entre RDBMS y Colmena?
- 21. En una base de datos Oracle, ¿cuál es la diferencia entre ROWNUM y ROW_NUMBER?
- 22. En SQL, ¿cuál es la diferencia una condición ON después de una combinación vs al final de múltiples UNE
- 23. Calcular rango de una combinación?
- 24. ¿Cómo deshacer una calabaza de combinación git?
- 25. ¿Cuál es la diferencia/relación entre AVR y Arduino?
- 26. Mezcla "Uso" y "ON" en Oracle combinación ANSI
- 27. ¿Cuál es la diferencia entre un tema y una plantilla?
- 28. ¿Cuál es la diferencia entre pánico y una afirmación?
- 29. ¿Cuál es la diferencia entre una referencia __weak y __block?
- 30. ¿Cuál es la diferencia entre un hilo y una fibra?
http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i76073 –
http://www.orafaq.com/node/1446 – cagcowboy
http://use-the-index-luke.com/sql/join –