MyISAM vs InnoDB
El motor de almacenamiento (storage-engine) es quien almacenará, manejará y recuperará información de una tabla en particular. Comparando MyISAM vs InnoDB, ninguno se destaca como la solución para la mayoría de los casos. Cada uno tiene sus pros y sus contras, por lo tanto al momento de decidir que motor de almacenamiento a utilizar dependerá mucho del escenario donde se aplique.
MyISAM
MyISAM es el motor de almacenamiento por default y está basado en el probado ISAM, incorporando nuevas características pero conservando su fiabilidad.
MyISAM almacena la información en tres archivos por tabla, uno para el formato de tabla, otro para los datos y un tercer archivo para los índices.
Las tablas MyISAM soportan un número de filas máximo de aproximadamente ~4.295E+09 y puede tener hasta 64 archivos índices por tabla.
Los campos Text y Blob pueden ser indexados completamente, lo que es de gran importancia para funciones de búsqueda.
InnoDB
InnoDB es relativamente nuevo comparado con MyISAM. Una de las principales diferencias de InnoDB es el soporte de transacciones e integridad referencial.
InnoDB provee bloqueo a nivel final, en contra del bloqueo a nivel tabla de MyISAM. Esto es, que mientras una consulta está actualizando o insertando una fila, otra consulta puede actualizar una fila diferente al mismo tiempo. Estas características incrementan la performance en concurrencia de múltiples usuarios.
Otra de las principales características es que permite definir Foreign Key Constraints, lo que permite a los desarrolladores asegurarse que los datos insertados con referencia a otra tabla permanecerán válidos (lo que se conoce como integridad referencial)
- Comparación
MyISAM, en la mayoría de los casos será más rápido que InnoDB en selecciones, actualizaciones e inserciones bajo circunstancias normales.
InnoDB también es un motor de almacenamiento ágil, pero se destaca porque incorpora características como bloqueo a nivel filas, transacciones y diseño de tablas relacionales. Aunque la primera de las características nombradas solo se destaca en tablas que son “martilladas” constantes, como por ejemplo una tabla de logs, para el resto de los casos, un bloqueo a nivel tabla es suficiente en condiciones normales.
InnoDB se recupera de errores o reinicios no esperados del sistema a partir de sus logs, mientras que MyISAM requiere una exploración, reparación y reconstrucción de índices de los datos de las tablas que aun no habían sido volcadas a disco.
Matriz de decisión
¿Tu tabla va a recibir INSERTs, UPDATEs y DELETES mucho más tiempo de lo que será consultada? | InnoDB |
¿Necesitaras hacer búsquedas full-text? | MyISAM |
¿Prefieres o requieres diseño relacional de bases de datos? | InnoDB |
¿Es un problema el espacio en disco o memoria RAM? | MyISAM |
¿Dudas? | MyISAM |
Como conclusión final, podemos establecer un empate técnico. No hay ganadores.
[…] MyISAM vs InnoDB […]
Se que el post ya es algo viejo, pero para las versiones de MysqL 5.6.4 y superiores, el motor InnoDB ya soporta búsquedas de full-text.
Saludos.
Thank you for the blog post. Thomas and I are saving for our new book on this matter and your post has made all of us to save money. Your opinions really responded all our concerns. In fact, a lot more than what we had thought of just before we came upon your great blog. My partner and i no longer have doubts along with a troubled mind because you have completely attended to all of our needs above. Thanks
Regards for this post, I am a big fan of this site would like to proceed updated.