16 de julio de 2009

MySQL – MyISAM vs InnoDB

La mayoría de las personas que utilizan MySQL saben que MyISAM e InnoDB son los dos motores de almacenamientos más comunes en MySQL. También es sabido, que la mayoría no toma en cuenta el motor de almacenamiento al crear una tabla y acepta el que viene por default en la base de datos.
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.

Via: mikebernat.com

0 comentarios:

 
Design by Wordpress Theme | Bloggerized by Free Blogger Templates | coupon codes