• Categoría: MySQL
  • Visto: 6603

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

Granularidad

Tabla

Tabla

Página

Fila

Almacenamiento

Ficheros

Memoria

Fichero por Tabla

Tablespace

Niveles de Almacenamiento

Ninguno

Ninguno

Read Commited

Todos

Formato Portable

N/A

No

Integridad Referencial

No

No

No

Clave Primaria con Datos

No

No

Caché

No