Sunteți pe pagina 1din 3

10 razones para elegir InnoDB como motor de almacenamiento de MySQL

Escrito en MySQL, Tutoriales

Una de las preguntas ms frecuentes al crear una tabla de MySQL es qu elijo,


MyISAM o InnoDB? Mucha gente decide de forma un poco aleatoria. Tanto MyISAM
como InnoDB son motores de almacenamiento. El motor de almacenamiento es
la capa de software que se coloca debajo del motor de consultas (la parte que se
encarga de analizar y optimizar las consultas de SQL). Se encarga de hacer todo el
trabajo sucio de localizar cada byte en el soporte fsico, de asegurarse de que se
cumplen las restricciones de integridad, de la concurrencia, etc.
Esta es la parte ms compleja del sistema gestor de bases de datos, se compone
de cientos de miles de lneas de cdigo altamente optimizado. Cada motor de
almacenamiento soporta unas caractersticas diferentes.

MyISAM: motor de almacenamiento simplificado. Trabaja con los datos de


una forma ms relajada, con el objetivo de simplificar su uso y tratar de
mejorar el rendimiento. Normalmente las tablas ocuparn menos espacio en
disco. Suelen ser ms rpidas para consultas de datos. Su contrapartida es que
no sigue las 12 reglas de Codd, no tiene control de claves forneas,
transacciones, su control de la concurrencia es muy limitado, etc..

InnoDB: motor ms sofisticado que cumple con las reglas del modelo
relacional bastante a rajatabla. Por ello, garantiza una mayor durabilidad en los
datos. En sus inicios se criticaba que aada muchas caractersticas pero era
mucho ms lento que MyISAM. Esto ya no es un problema y en determinadas
circunstancias le supera en rendimiento (sobre todo en modificaciones
concurrentes de datos y en consultas indexadas por clave primaria).

Lo ms importante es no mezclar tablas de distintos motores de


almacenamiento. De lo contrario hacer un JOIN entre dos tablas de distinto tipo
el rendimiento ser psimo. MySQL tratar de optimizarlo lo ms posible, pero no
podr hacer milagros. Es posible que tenga sentido tener alguna tabla de un tipo
distinto en determinadas circunstancias. Por ejemplo, podemos tener los datos
vitales en tablas InnoDB y tener tablas con logs/registros en MyISAM porque no
requieren de mucha complejidad.
A continuacin detallaremos diez razones por las cuales InnoDB puede ser la
opcin correcta frente a MyISAM:

1.

Soporte de claves forneas. InnoDB permite relacionar tablas de forma


implcita en la base de datos. Esto har que la propia base de datos se
encargue de eliminar inconsistencias en los datos. Con MyISAM tendramos que
asumir las claves forneas, pero podramos obtener registros invlidos. Por
ejemplo, no podemos asegurarnos de que si borramos un producto, primero
tengamos que borrar las categoras asociadas al mismo. Con MyISAM
podramos borrar un producto y la tabla de producto_categoria quedara con
registros hurfanos.

2.

Control de concurrencia de alto nivel. En MyISAM cuando una


transaccin modifica un registro de una tabla, la tabla entera queda bloqueada
mientras se realice la modificacin. Cualquier otra transaccin que se realice
mientras tanto tendr que esperar. Eso puede crear cuellos de botella. Es muy
comn ver listas de procesos con cientos de INSERTs que estn esperando a
otro que se ha quedado atascado. Ante eso poco ms se puede hacer que
reiniciar el servidor o matar los procesos. InnoDB en cambio, proporciona un
sistema de bloqueos a nivel de fila, lo que significa que solamente la fila que
est siendo modificada queda bloqueada. Otras transacciones tratando de
modificar la misma tabla podran funcionar siempre y cuando modifiquen a
otros registros. Modificar una tabla de forma concurrente es altamente
probable. Modificar un mismo registro simultneamente es mucho menos
comn.

3.

Bajo ndice de tablas corruptas. Esto es debido en parte al punto 2.


Debido al mal control de concurrencia de MyISAM, es muy habitual encontrarse
con tablas corruptas si una transaccin falla. En InnoDB se cumple la norma de
que cualquier transaccin llevar a la base de datos de un estado vlido a otro
estado vlido. Muy raramente encontraremos una tabla InnoDB corrupta.
Aunque cabe mencionar que reparar una tabla MyISAM es trivial mientras que
en InnoDB puede llegar a ser una pesadilla.

4.

Soporte de transacciones. InnoDB soporta las transacciones. Es posible


enviar una serie de consultas que se ejecuten de forma unificada. As podemos
crear aplicaciones con alto ndice de fiabilidad, porque podemos asegurarnos de
que no dejamos una operacin a medio hacer. Cabe destacar que por defecto,
el parmetro autocommit est activado, as que si queremos utilizarlas
tendremos que o bien especificarlo (ver cmo) o desactivar esa opcin.

5.

ndices clusterizados. Los datos se almacenan fsicamente por orden


(alfabtico o numrico segn se aplique) del valor de la clave primaria.
Consultas que filtren nicamente por la clave primaria sern extremadamente
eficientes, porque con saber el valor que buscamos, InnoDB con un par de
operaciones ya puede saber dnde se encuentra el dato.

6.

Mejores opciones de replicacin. La replicacin consiste en copiar los


datos de MySQL en varios servidores para repartir el trabajo a la hora de
realizar consultas de datos. Al usar la replicacin es fundamental que todos los
nodos (servidores con copia de la base de datos) tengan una copia consistente
de los datos, de lo contrario cada nodo podra devolver resultados distintos.
Esto slo lo puede garantizar InnoDB mediante sus transacciones y su
avanzado sistema de bloqueos.

7.

Ms escalabilidad. Las tablas MyISAM frecuentemente quedan bloqueadas


y/o corruptas. En una tabla que almacene 200 registros esto puede ser un
problema menor, porque repararla llevara dos segundos. En una tabla con 20
millones de registros y que ocupe 2GB de espacio en disco esto es inaceptable.
Podramos dejar la aplicacin inutilizada durante horas. Si predecimos que
nuestra tabla crecer mucho en tamao o en requisitos de acceso, deberamos
considerar a InnoDB como opcin.

8.

Motor ACID compliant. Estas son las siglas de Atomicidad, Consistencia,


Aislamiento y Durabilidad. La base de datos siempre va de un estado vlido a
otro estado vlido.

9.

Tablas sin lmite de tamao. En MyISAM cada tabla se guarda en un


archivo por separado. Si la tabla supera los 2GB es posible que el sistema de
archivos del sistema operativo no sea capaz de utilizarlo. InnoDB se encarga de
que las tablas no tengan lmite de tamao. Para ello es posible que necesite
dividir los datos en ficheros ms pequeos. MyISAM no cuenta con esas
caractersticas y tiene que depender 100% del sistema de archivos.

10.

ndices hash adaptables. Si un ndice cabe en la memoria RAM y una


tabla es consultada frecuentemente, es posible que InnoDB cree
automticamente un ndice hash en memoria. Lo que hace es replicar el ndice
que se guarda en disco en la memoria RAM, de tal manera que los accesos
tengan una velocidad muy superior. Es un sistema muy complejo que puede
aumentar el rendimiento de las consultas significativamente.

S-ar putea să vă placă și