Aprende todo un fin de semana sin pagar una suscripción 🔥

Regístrate

Comienza en:

05D

03H

54M

43S

121

InnoDB y MyISAM: El ying yang de MySQL ☯🐬

Cuando de bases de datos relacionales se habla, es indiscutible que uno de los RDBMS (Relational Database Management System) líderes es MySQL. Fue tan importante en la historia de la tecnología que hasta el día de hoy permanece como un estándar. Alojó los datos de Facebook en sus inicios, y a día de hoy sirve de modelo para aplicaciones web mundialmente famosas, como Joomla, Wordpress o Drupal.

Sin embargo, esconde dentro de sí una variedad enorme para construir el corazón de cualquier aplicación: el esquema. Acompañame a ver como podemos diseñar con una exactitud quirúrgica la implementación de nuestras entidades y relaciones, utilizando los dos potentes motores que ofrece MySQL en su core: <ins>InnoDB</ins> y <ins>MyISAM</ins>

El diseño, el gran cuello de botella

Antes de comenzar cualquier tutorial sobre bases de datos vale la pena recordar algunos conceptos básicos del diseño de las mismas, el cual es tan importante que dependiendo de su calidad puede dejar a una empresa en la bancarrota o convertirla en una startup.

Supongamos que vamos a construir un blog sobre autos deportivos 🚗🏁. Vamos a tener usuarios que publican posts, cada uno perteneciente a una categoría y con una o muchas etiquetas. Además, pueden escribir comentarios en cada artículo. Cada cosa remarcada en negrita es lo que llamamos entidad, la cual posee atributos que la caracterizan y relaciones con algunas otras.

En MySQL nosotros llamamos a las entidades tablas y a las bases de datos que alojan a estas entidades esquemas. Las tablas a veces reciben muchos registros en un tiempo corto, pero también muchas consultas en segundos. Por ejemplo, todas las semanas se registran nuevos usuarios, pero cada día se leen más de 10000 veces los posts del sitio. Y aquí está el quid de la cuestión…

Los desconocidos, InnoDB y MyISAM

Resulta que dentro de un Sistema Gestor de Bases de Datos existen también motores internos que se encargan de manejar, almacenar y recuperar información de las tablas que ya mencionamos. Se denominan storage-engine o motores de almacenamiento.

Lo importante es lograr encontrar el funcionamiento predominante de una tabla en nuestro sistema. ¿Vamos a escribir datos muy seguido? ¿Necesitamos hacer consultas constantemente? ¿Es importante cumplir con ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad)?

Todas estas preguntas deben ser respondidas antes de crear la estructura de cada entidad. Una vez que lo hayamos hecho, es hora de escoger el engine correcto para construir nuestras tablas:

InnoDB, el rey de la escritura

Es un motor diseñado exclusivamente para fortalecer la Atomicidad, Consistencia, Aislamiento y Durabilidad en una base de datos. ¿Queremos hacer una gran cantidad de Transacciones? InnoDB. ¿Queremos una integridad formidable en nuestros datos? InnoDB. Y lo más importante, ¿Vamos a hacer un fuerte uso de las sentencias INSERT y UPDATE? Definitivamente InnoDB.

Un caso ideal para este storage-engine sería nuestra tabla de usuarios, cuya sentencia SQL de creación podría ser algo parecido a esto:

CREATETABLEIFNOTEXISTS`users` (
    idINTUNSIGNED PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(100) NOTNULL,
    passwordVARCHAR(64) NOTNULL,
    email VARCHAR(150) NOTNULLUNIQUE,
    active TINYINT NOTNULLDEFAULT1,
) ENGINE=InnoDB;

MyISAM, el rey de la lectura

Si estamos hablando de velocidad para hacer consultas, el claro ganador es MyISAM. Siendo optimistas (y buenos copywriters) nuestro blog recibirá miles y miles de vistas todos los días por fanáticos del automovilismo de todo el mundo. Sería un desastre que todo nuestro esquema de datos tardara más de lo esperado en responder a nuestro backend. Muchos usuarios se irían, y no queremos eso. Por ende, como van a producirse múltiples sentencias SELECT, MyISAM debe formar parte del core de nuestra tabla.

Una vez más, un nominado excelente para un ejemplo es la tabla de posts:

CREATETABLEIFNOTEXISTS`posts` (
    idINTUNSIGNED PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(150) NOTNULL,
    contentTEXTNOTNULL,
    author_id INTNOTNULL,
    category_id INTNOTNULL,

Al ser el motor por defecto, no debemos aclararlo en la sentencia.

Conclusión

A partir de ahora sería un verdadero pecado como arquitectos de software o administradores de bases de datos no pensar en esta característica, que como dije en un principio puede a futuro determinar el éxito o fracaso de un proyecto. ¿Tienes alguna idea en mente que involucre datos que quieras hacer realidad? ¿Ya decidiste el storage-engine ideal para cada tabla? Házmelo saber en los comentarios, y no te pierdas el curso de SQL y MySQL de Platzi para profundizar en el tema y convertirte en un verdadero experto 😉

Escribe tu comentario
+ 2
Ordenar por:
19
17513Puntos

¡Muchas gracias por tu aporte! Lo acabo de leer y ahora me queda mucho más claro el concepto

2
44722Puntos
3 años

De nada eduardo! 😉

3
2 años

Concuerdo con Eduardo, a pesar de haber llevado 3 semestres bases de Datos jamás me habían dicho esto y creo que como Ing en software es súper importante. Ya que si seré líder de proyectos debo saber que opciones pueden existir.

0
42487Puntos
2 años

Hola lorerli cervances, yo tengo algo de tiempo laborando y no sabía sobre estos conceptos, así que siempre se aprende algo nuevo.

4
26416Puntos

Muy buen articulo, para tener en cuenta.

La tabla MyISAM esta en memoria?

Que otro tipo de tablas son importantes para crear en un base de datos enfocada al rendimiento y a la integridad de los datos?

3
736Puntos

MyISAM es el motor por defecto, InnoDB si se tiene que declarar. Pequeño gran detalle.

3
6489Puntos

gracias por el articulo

2
67170Puntos

Bien por el articulo, desconocía que habían dos tipos de motores.

2
9059Puntos

Gracias, después de leer este artículo es más clara la diferencia.

2
66063Puntos

Muy claro todo, una herramienta más al tool de ingeniero de datos 😄

2
3894Puntos

Excelente Facundo, la de cosas que no sabía que existían.

2
6317Puntos

Muchas gracias, excelente manual y me despejo las dudas de los 2 tipos de motores.

2
18637Puntos

Muchas gracias por la info

2
30029Puntos

Gracias Facundo!! Excelente complemento

2
9508Puntos

Es muy bueno aprender acerca de esto. Esta genial este aporte!!!

2
7442Puntos

Excelente descripción de estos engine. Gracias

2
23497Puntos

Sabía más o menos las diferencias, de lo que no estaba consciente era de que pueden variar de tabla en tabla en un mismo esquema, fabuloso.

2
13395Puntos

Hola, una consulta, que debería realizar en el caso que tenga una tabla que recibirá gran cantidad de inserts y updates. Sin embargo, también deberá ser cargar rapido?

2
44722Puntos
3 años

Recomendaría que uses InnoDB si quieres mantener tu información lo más estable y a prueba de fallas posible. Si es información muy volátil, como por ejemplo sobre transacciones que van a borrarse en algún tiempo o llevarse a un Data Warehouse, usaría MyISAM. Espero haber resuelto tu duda 😉

2
16390Puntos

Excelente contenido, gracias por tu aporte 😄

2
191Puntos

Excelente articulo! Segun yo entiendo InnoDB, el rey de la escritura para hacer un fuerte uso de INSERT & UPDATE y MyISAM, el rey de la lectura, que darà una respuesta rápida hacia las lecturas de datos.
Y por què no los dos?

1
9293Puntos

gracias por el post , aclare muchas dudas.

1

Increíble aporte del Gran Facundo,
Enorme Teacher!!
Enorme Hater!!

1
6323Puntos

Un aporte muy valioso, me quedo claro y terminaré de aclarar el concepto con la práctica. Pero ya de lleno esta nformación ayuda bastante

1
9899Puntos

Muy claros los conceptos, muchas gracias!

1
21227Puntos

Muy buen post. De hecho, que exista este comentario en la clase me enseñó cómo se escriben los nombres de los motores. El profesor lo pronuncia, pero no hay forma de saber cómo se escribe sólo escuchándolo.

1
11887Puntos

excelente, no entendí nada lo q se dicto en la clase hasta q leí tu tutorial, gracias

1
1665Puntos

Muchas gracias, todo esta muy bien estructurado que queda muy claro =D.

1
1754Puntos

Ojala hubiera tenido conocmiento de esta info hace unos 3 años, me hubiera resuelto muchos dolores de cabeza. Gracias bro

1
81625Puntos

Creo que apenas habia escuchado los nombres, gracias por ayudarme a aclarar los ocnceptos

1
2261Puntos

Gracias por el aporte, complementa mucho la clase en donde vi el post.

1
7738Puntos

Tengo una pregunta
¿Cuando ya la tabla está creada hay una consulta que me muestre si es InnoDB o MyIsam?
¿Una vez está creada la tabla se puede cambiar?

1

A pesar de que MongoDb y otras tecnoogias no relacionales estan en auge, sigo pensando que MySQL es bastante poderoso y bastante fácil de manejar.

Soy de la vieja escuela por lo que adaptarme a estas nuevas teconologías, despues de aaaaños de manejar MySQL ha sido un poco complejo, sin embargo no por esto dejo de aprender cosas nuevas, no se, tal vez en un futuro cercano pueda decir que Mongo es mejor que MySql 😄 jeje

1
12256Puntos

Excelente, gracias por el aporte

1
6489Puntos

gracias por el aporte

0
4905Puntos

Gracias, es un buen aporte y complemento para el curso de SQL y MySQL

0
8928Puntos

Excelentísimo aporte 😃. Gracias

0
9832Puntos

excelente aporte.

0
16488Puntos

Gracias por el aporte 😃 me ayudó mucho a comprender mejor el tema.

0
8145Puntos

Genial de los mejores tutoriales, justo vengo del curso de SQL