Comprender las uniones hash en MySQL 8

En MySQL 8.0.18 hay una nueva característica llamada Uniones hashy quería ver cómo funciona y en qué situaciones puede ayudar. Aquí puedes encontrar una explicación muy detallada. cómo trabajar bajo el capó.

Los conceptos básicos de nivel superior son: si hay una combinación, cree una tabla hash de memoria basada en una de las tablas y lea la otra tabla fila por fila, calcule un hash y realice una búsqueda en la tabla. tabla hash en la memoria.

Genial, pero ¿eso nos da algún beneficio?

En primer lugar, esto solo funciona en campos que no están indexados, por lo que es un escaneo inmediato de la tabla y, por lo general, no recomendamos unirse sin indexar porque es lento. Aquí es donde Hash Joins en MySQL puede ayudar porque usa una tabla hash en la memoria. Bucle anidado.

Hagamos algunas pruebas y veamos. Primero creé las siguientes tablas:

inserté 131072 archivos aleatorios en ambas tablas.

131072

c2 |

1 explain format=tree póngase en fila en colocar

(0.00

segundo)

vamos a usar eso

0.73s |

17172231

|

|

+ ———- +

|

t2.c2; + ———- +

| ignore indexcontar

Picadillo >

Mesa evitar sobre

t1

(costo

=

13219.45

  • póngase en fila
  • =
  • 131472)

1póngase en fila

en

colocar

(0.00 seg) Siempre pienso que sería bueno si pudiera decirle al optimizador con una sugerencia para usar Hash Joins incluso si hay un índice disponible, para que no ignoremos el índice en todas las tablas. Creé la solicitud de función para esto. Sin embargo, si lee detenidamente mi primer informe de error, es posible que vea un comentario de un desarrollador de MySQL que indica que esto podría no ser necesario: BNL (Block Nested-Loop) seguirá siendo completamente seguro en algún momento, momento en el cual esta sugerencia será ignorado. Esto podría significar que planean eliminar la unión BNL en el futuro y quizás reemplazarla con la unión Hash. Limitaciones Podemos ver que Hash Join puede ser poderoso, pero existen limitaciones: como dije, solo funciona en columnas que no tienen índices (o debe ignorarlos). Funciona solo con condiciones de combinación justa. No funciona con LEFT o RIGHT JOIN. También me gustaría ver una métrica de estado para monitorear cuántas veces se ha utilizado Hash Join, y para eso, tengo otra solicitud de función. Conclusión Hash Join parece una nueva opción de unión muy poderosa, y debemos estar atentos a esto porque no me sorprendería si también tenemos otras funciones en el futuro. En teoría, también podría unir izquierda y derecha, y como podemos ver en los comentarios del informe de errores que Oracle ha proyectado para el futuro.

Author: Ing. Luis

A lo largo de conocer Windows y otros sistemas operativos me eh encontrado con diversos tipos de error, ahora brindo soluciones según mi experiencia-

Deja un comentario