MySQL es sin duda uno de los gestores de base de datos más populeres que existen en el mercado. y muy probablemente hayas oido hablar de él, o inclusive, muy probablemente ya hayas trabajado con él.
Y, si es así, no me dejarás mentir. Al ser un gestor de base de datos gratuito y al utlizar el lenguaje de consultas SQL su integración con nuestros proyectos es bastante sencillo. Basta con instalar algún conector, definir ciertas configuraciones (host, puerto. username, password etc ..) y listo, ya podremos hacer uso de él. 🥳
Sin embargo, ¿Sabías qué, MySQL posee diferentes motores de almacenamientos de los cuales podemos hacer uso? 🧐
Si tu respuesta fue no, no te preocupes, ya que en este post me gustaría habláramos sobre 2 de los motores más importantes que MYSQL Posee. Me refiero a InnoDB y MyISAM.
Para todos aquellos que trabajamos con MySQL importante que conozcamos estos motores, ya que, el utilizar uno y otro, puede suponer un mayor rendimiento al momento de almacenar u obtener información de nuestra base de datos. Y es por ello que, en esta ocasión me gustaría hablaremos, en detalle, sobre exactamente cómo funcionan estos 2 motores, su pro y contras, además de conocer cuando es buena idea utilizarlos
Es un post bastante interesante así que te invito a que te quede. 😉
BIen, sin más dilación, comencemos con el post.
MOTORES DE ALMACENAMIENTO ⚛
Comencemos con la pregunta obligada ¿Qué es un motor de almacenamiento? 🤔 Bien, deja te explico.
En términos simples un motor de almacenamiento es el encargado de almacenar, gestionar y recuperar toda la información para nuestras tablas.
Los motores de almacenamiento son de suma importancia, ya que a partir de ellos podremos mejorar el performance al momento de obtener o almacenar información. Así mismo, los motores de almacenamientos pueden añadir una mayor seguridad a la integridad de los datos.
Para nosotros conocer que motores de almacenamientos podemos utilizar, una vez autenticados con MySQL, ejecutamos el comando:
SHOW ENGINES
Este comandos nos desplegará un listado completo de todos los motores de almacenamiento que soporta nuestra versión de MySQL.
En mi caso, al utilizar la versión 8, obtengo un listado de 9 Motores de almacenamiento.
* InnoDB
* MRG_MYISAM
* MEMORY
* BLACKHOLE
* MyISAM
* CSV
* ARCHIVE
* PERFORMANCE_SCHEMA
* FEDERATED
Para MySQL, los 2 motores de almacenamientos más populares son: InnoDB y MyISAM.
Veamos cada una de sus caracteristicas.
INNODB
Comencemos con InnoDB. Verás InnoDB es un motor de almacenamiento transaccional. Esto quiere decir que al hacer uso de él, seremos capaces de implementar transacciones (Commits y Rollbacks).
Recordemos, las transacciones nos permiten ejecutar múltiples sentencias SQL de forma segura, donde, obligatoriamente, todas ellas deben ejecutarse de forma correcta para así poder persistir los datos, y en dado caso exista por lo menos un error, poder revertir todos los cambias realizados hasta ese momento. Manteniendo así una base de datos consistente en todo momento.
Este motor de almacenamiento nos permite tener todas las características ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad). 🤠
De igual forma, InnoDB permite el bloqueo de filas para nuestras tablas, lo cual se traduce en que tareas como inserts, updates y deletes sean mucho más rápidas en comparación con otros motores de almacenamiento. Además, por supuesto, que al realizar un bloqueo a nivel fila, se evita asi que múltiples sentencias SQL, que se ejecuten de forma simultánea, de forma concurrente, puedan afectar a un mismo registro.
Con InnoDB todas las modificaciones que se realicen a las tabla (ya sean Inserts, updates o deletes) se comprueban para garantizar que no se generen inconsistencias en las mismas.
Un motor sin duda diseñado para la seguridad de nuestra información. 😎
Para las últimas versiones de MySQL, InnoDB será el motor a utilizar por default al momento de crear nuestras tablas.
Aunque podemos definirlo de forma explícita.
CREATE TABLE users (id INT, username VARCHAR (50), PRIMARY KEY (id)) ENGINE=InnoDB;
MYISAM
Listo, toca el turno de hablar sobre MyISAM.
Verás, MyISAM, a diferencia de InnoDB, no permite el bloque de filas, no implementa transacciones a nivel tablas, ni tampoco incorpora todas las características ACID.
Lo que sí permite MyISAM, es un bloque a nivel tabla, que de hecho, al ser un bloqueo mucho más general, tareas como inserts o un updates pueden ser mucho más tardadas de lo habitual.
Al leer todo esto uno puede llegar a pensar, si este motor carece de todo esto y tiene estos problemas ¿Por qué debería usarlo? Bueno, si bien es cierto MyISAM en primera instancia no suena a una de nuestras mejores opciones, tiene un par de características que lo hacen muy llamativo. 🧐
Por ejemplo, los ficheros que utiliza MyISAM para almacenar la información, por lo general son mucho más pequeños que los que utiliza InnoDB; lo cual se traduce en menos espacio en memoria. Por lo cual, utilizar MyISAM es una muy buena idea en sistemas donde el espacio en memoria sea crítico o algo a tener en cuenta. 💾
Por otro lado, MyISAM, al utilizar el mecanismo de almacenamiento ISAM (Método de acceso secuencial indexado) proporciona una rápida recuperación de datos. Por lo cual es una muy buena idea utilizar este motor en proyectos donde se priorice la obtención de la información sobre la creación o actualización. Es decir, donde hagamos muchos más selects que inserts y updates.
Si queremos crear una tabla que utilice este motor de almacenamiento, podemos hacer uso de la palabra reservada ENGINE
CREATE TABLE users (id INT, username VARCHAR (50), PRIMARY KEY (id)) ENGINE=MyISAM;
CONCLUSIÓN
En conclusión, si bien ambos motores de almacenamientos nos proveen de pros y contras, de forma personal creo que nuestra mejor opción siempre será utilizar InnoDB; ya que este motor nos provee de mayores mecanismos para salvaguardar la información almacenada, que bien, al final del día eso es lo que a la mayoría nos interesa. ⏲
Si bien, no destacaría el uso de MyISAM, creo que lo dejaría para proyectos muy muy específicos. Principalmente para proyectos pequeños o bien para entornos de desarrollo o pruebas.
Ya para finalizar me gustaría mencionar que, si en dado caso deseas conocer qué motor de almacenamiento utiliza para alguna de tus tablas, puedes apoyarte de las siguientes sentencias. 🍺
show table status like '<Nombre de la tabla>';
o
SELECT TABLE_NAME,
ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'dbname';