Hace unas semanas iniciamos la actualización a MySQL 8 en nuestros servidores. Esto fue el resultado de un largo proceso de monitorización y pruebas de compatibilidad de esta versión con los sitios web de nuestros clientes, hasta que concluimos que MySQL 8 es altamente compatible con las principales aplicaciones alojadas en nuestra plataforma y es seguro realizar el cambio.

MySQL es una pieza de software fundamental en nuestro stack, utilizada por la gran mayoría de nuestros clientes para potenciar sus bases de datos. Su funcionamiento óptimo tiene un gran impacto en el rendimiento general y la disponibilidad del sitio web.

¿Cuáles son las novedades de MySQL 8?

MySQL 8 introduce una variedad de nuevas características y mejoras de antiguas funcionalidades, todas con el objetivo de mejorar el rendimiento general y la escalabilidad, así como la experiencia del desarrollador. A continuación detallamos las más notables.

Mejor rendimiento y escalabilidad

MySQL 8 ofrece un mejor rendimiento y escalabilidad. Las pruebas de benchmark muestran mejores resultados en términos de rendimiento y escalabilidad para MySQL 8 en comparación con MySQL 5.7. Las pruebas muestran que MySQL 8 maneja mucho mejor las operaciones de lectura/escritura y el número de transacciones procesadas es mucho mayor.

Además, las pruebas muestran que MySQL 8 utiliza el hardware mucho mejor en comparación con la versión 5.7.

Estas son algunas de las mejoras que lo hacen posible:

  • Escalado de cargas de trabajo de lectura/escritura

MySQL 8 muestra un mejor rendimiento en lectura/escritura intensiva y se observa más de 2 veces mejor rendimiento en cargas altas comparado con MySQL 5.7.

  • Mejor rendimiento en cargas de alta contención

El rendimiento para cargas de trabajo de alta contención se ha mejorado significativamente en MySQL 8. Una carga de trabajo de alta contención ocurre cuando varias transacciones están esperando un bloqueo en la misma fila en una tabla, causando colas de transacciones en espera.

En MySQL 8, tales ráfagas se manejan mucho mejor en términos de transacciones por segundo y latencia. Eso lleva a una mejor utilización del hardware (eficiencia), ya que el sistema necesita menos recursos adicionales y, por lo tanto, puede funcionar con una carga media más alta.

  • Particionamiento nativo/InnoDB Pool mejorado

MySQL 8 admite particionado nativo para el motor InnoDB. Eso te permite dividir tablas grandes en particiones más pequeñas. Esto puede mejorar el rendimiento de las consultas y reducir los requisitos de almacenamiento, especialmente para tablas grandes. La nueva versión de MySQL también introduce mejoras en el pool InnoDB. El pool es responsable de almacenar en caché los datos y reducir las operaciones de E/S.

Expresiones de tabla comunes (CTE)

Con la última versión de MySQL 8, ahora también puedes aprovechar las expresiones de tabla comunes. Una expresión de tabla común es un conjunto de resultados que existe solo temporalmente mientras se ejecuta una declaración que luego se puede usar en la misma declaración.

Estas CTE permiten crear consultas más complejas utilizando bloques más sencillos, basados en tablas temporales. En otras palabras, las expresiones de tabla comunes permiten utilizar conjuntos de resultados temporales con nombre.

Cambio del carácter por defecto

El carácter predeterminado en MySQL 8 se cambia a utf8mb4.

Una de las diferencias más notables entre utf8, utf8mb3 y utf8mb4 es el número máximo de bytes por carácter. Mientras que utf8 y utf8mb3 solo pueden almacenar caracteres en el plano BMP (Basic Multilingual Plane) de Unicode, utf8mb4 puede almacenar caracteres en el plano suplementario. utf8mb4 admite una amplia gama de caracteres, incluyendo emojis y otros caracteres especiales.

Índices invisibles

Otra nueva característica de MySQL 8 son los índices invisibles. En general, los índices son utilizados por el optimizador de consultas MySQL para mejorar la velocidad con la que se recuperan los datos, mientras que los índices invisibles son los que están ocultos para el optimizador de consultas MySQL y permiten probar la eliminación de un índice en el rendimiento de la consulta, sin hacer un cambio destructivo.

Por ejemplo, si estás trabajando con una tabla muy grande con unos pocos índices, y quieres optimizarla aún más eliminando ciertos índices y añadiendo otros nuevos. Imagina que sabes que necesitarás estos índices en el futuro. Eliminarlos en primer lugar puede ser peligroso, porque construirlos de nuevo requiere muchos recursos. Para evitar esto, ahora puedes simplemente utilizar índices invisibles: convierte algunos existentes en invisibles, prueba lo que necesites con los nuevos y, cuando los necesites, vuelve a hacerlos visibles.