A la hora de elegir el motor de almacenamiento en MySQL ¿cuando debería utilizar InnoDB y cuando MyISAM y de qué depende la elección? ¿Es alguna superior a otra?
InnoDB es un mecanismo de almacenamiento de datos de código abierto para la base de datos MySQL, incluido como formato de tabla estándar en todas las distribuciones de MySQL AB a partir de las versiones 4.0...
MyISAM es el mecanismo de almacenamiento de datos usado por defecto por el sistema de bases de datos relacionales MySQL hasta su versión 5.5. Este tipo de tablas están basadas en el formato ISAM pero con nuevas extensiones....
Las únicas razones para usar MyISAM en versiones de MySQL previas a la 5.5, era que InnoDB no soportaba particionar tablas ni crear índices FULLTEXT. Esas restricciones ya no existen. Ademas es que es más rápido para leer y ligeramente más rápido para insertar (en masa y midiendo un proceso aislado), pero eso es porque tales operaciones efectúan un bloqueo de tabla.MyISAM es el mecanismo de almacenamiento de datos usado por defecto por el sistema de bases de datos relacionales MySQL hasta su versión 5.5. Este tipo de tablas están basadas en el formato ISAM pero con nuevas extensiones....
Si vas a tener múltiples updates, o inserciones concurrentes, por ejemplo, un bloqueo a nivel de tabla es muy ineficiente, versus un update sobre una tabla InnoDB que utiliza bloqueo a nivel de fila, y por tanto permite operaciones concurrentes. Súmale a todo eso que InnoDB permite el uso de llaves foráneas que son indispensables para mantener la integridad referencial de un modelo de datos, el soporte para transacciones.
En resumen, usa InnoDB porque:
- En la versión MySQL actual soporta todo lo que soporta MyISAM
- Llaves foráneas / Integridad relacional
- Bloqueo a nivel de fila
- Transacciones
- Todas esas ventajas superan con creces una merma en velocidad de los select.
Ahora haremos un breve resumen sobre la diferencia de estas dos
MyISAM
- Bloqueo de tabla.
- Aumento del rendimiento si nuestra aplicación realiza un elevado número de consultas “Select”.
- Las tablas pueden llegar a dar problemas en la recuperación de datos.
- Permite hacer búsquedas full-text.
- Menor consumo memoria RAM.
- Mayor velocidad en general a la hora de recuperar datos.
- Ausencia de características de atomicidad ya que no tiene que hacer comprobaciones de la integridad referencial, ni bloquear las tablas para realizar las operaciones, esto nos lleva como los anteriores puntos a una mayor velocidad.
- Bloqueo de registros
- Soporte de transacciones
- Rendimiento
- Concurrencia
- Confiabilidad
- Permite hacer búsquedas full-text (mysql >= 5.6)
Integridad de datos, cuando los contenidos se modifican con sentencias INSERT, DELETE o UPDATE, la integridad de los datos almacenados puede perderse de muchas maneras diferentes. 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 aún no habían sido volcadas a disco.
Además es probable que si nuestra aplicación hace un uso elevado de INSERT y UPDATE notemos un aumento de rendimiento con respecto a MyISAM.
Tutoriales en linea utiliza actualmente InnoDB y a experimentado un mejor rendimiento en nuestro sitio web, pero a priori ha habido un aumento significativo en el peso de nuestra BD, mas de 200% del peso con MyISAM. No obstante, merece que en nuestro anel haya ese aumento significativo de peso en megabyte en nuestra DB de DataLife Engine... :)
Comentarios