Cuando vamos a diseñar una base de datos con MySQL será necesario decidir qué motor de almacenamiento vamos a utilizar.
MySQL 5 dispone de diferentes motores de almacenamiento, pero en este articulo a ver los principales.
- MyISAM Storage Engine: Es el motor por defecto y esta basado en base de datos ISAM. Es muy rápido pero no transaccional.
- InnoDB Storage Engine: Es transacional, incluyendo integridad referencial.
- Memory (Heap) Storage Engine: Este tipo de motor almacena los datos en memoria, no en disco. Es todavía más rápida.
- CSV Storage Engine: Es un motor que se almacena los datos en un fichero de texto guardando los valores separados por comas.
- BDB (BerkeleyDB) Storage Engine: En un motor transaccional desarrollado originalmente por U.C. Berkeley.
Naturalmente es posible utilizar distintos motores en una misma instancia, la decisión correcta depende en gran parte del uso futuro que tendrá la base de datos. Y eso, suele ser difícil saberlo con exactitud durante el diseño.
De todas formas, estos son algunos de los criterios a considerar:
- Transacciones y Concurrencia.
Si vamos a necesitar transacciones y alta concurrencia de usuarios, probablemente InnoDB será la mejor opción. Es decir, que obtendremos mejor rendimiento si las tablas que se vayan a ver involucradas frecuentemente en consultas o transacciones y que sufran una alta concurrencia de usuarios se basan en el motor InnoDB de MySQL 5. Aunque la concurrencia no sea alta, pero necesitamos transacciones, InnoDB puede ser la solución.
El motor MyISAM no soporta transacciones, pero si no las necesitamos, MyISAM será con toda probabilidad la mejor opción.
- Copias de Seguridad.
La realización de copias de seguridad también puede condicionar la elección. Si podemos detener periódicamente la base de datos para realizarlas, cualquier motor servirá. Pero si debemos realizarlas “en caliente” la elección será mucho más complicada.
- Características Especiales
Por último, las características especiales de nuestros desarrollo pueden obligarnos a recurrir a un tipo determinado de motor de almacenamiento.
En concreto, si nuestra aplicación depende de la capacidad para contar rápidamente el número de registros de una tabla (SELECT COUNT(*) FROM) recurriremos a MyISAM, que siempre sabe cuantos registros tiene sin necesidad de contarlos. Sin embargo, InnoDB debe realizar la cuenta.
Así mismo, recurriremos a MyISAM si necesitamos realizar eficientemente búsquedas por texto completo (WHERE notas LIKE '%...). Pero sin embargo, InnoDB será la solución en los casos en los que necesitemos disponer de integridad referencial.
- Resumen de Características
La siguiente tabla resume las características de los motores de almacenamiento:
Característica |
MyISAM |
Memory |
BerkeleyDB |
InnoDB |
Transacciones |
No |
No |
Sí |
Sí |
Granularidad |
Tabla |
Tabla |
Página |
Fila |
Almacenamiento |
Ficheros |
Memoria |
Fichero por Tabla |
Tablespace |
Niveles de Almacenamiento |
Ninguno |
Ninguno |
Read Commited |
Todos |
Formato Portable |
Sí |
N/A |
No |
Sí |
Integridad Referencial |
No |
No |
No |
Sí |
Clave Primaria con Datos |
No |
No |
Sí |
Sí |
Caché |
No |
Sí |
Sí |
Sí
|