¿Qué es InnoDB y MyISAM en MySQL?


122

¿Qué es InnoDBy MyISAMen MySQL?



Es el motor de la base de datos ... kavoir.com/2009/09/…
Matthieu

¿Podemos usar ambos motores de almacenamiento al mismo tiempo para nuestra base de datos?
user130561

1
Puede usarlos simultáneamente en diferentes tablas, pero para una tabla determinada, deberá elegir cuál desea usar ...
Matthieu

Respuestas:


111

InnoDBy MYISAMson motores de almacenamiento para MySQL.

Estos dos difieren en su implementación de bloqueo: InnoDBbloquea la fila particular en la tabla y MyISAMbloquea toda la MySQLtabla.

Puede especificar el tipo dando MYISAMOR InnoDBmientras crea una tabla en DB.


Respuesta clara y sencilla.
vadiraj jahagirdar

38

Mira esto

InnoDB y MyISAM

InnoDB es un motor de almacenamiento para MySQL, incluido de serie en todos los binarios actuales distribuidos por MySQL AB. Su principal mejora sobre otros motores de almacenamiento disponibles para su uso con MySQL es la compatibilidad con transacciones compatibles con ACID

MyISAM es el motor de almacenamiento predeterminado para las versiones del sistema de administración de bases de datos relacionales MySQL anteriores a la 5.5 1 . Se basa en el código ISAM anterior, pero tiene muchas extensiones útiles. La principal deficiencia de MyISAM es la ausencia de soporte de transacciones. Las versiones de MySQL 5.5 y superiores se han cambiado al motor InnoDB para garantizar restricciones de integridad referencial y una mayor concurrencia.


1
¿Podemos usar ambos motores de almacenamiento al mismo tiempo para nuestra base de datos?
user130561

2
puede, porque para cada tabla puede definir un motor de almacenamiento diferente. otra pregunta es si debería hacerlo. en la documentación de mysql hay algunas explicaciones sobre este tema.
nano7

18

Son motores de almacenamiento.

http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html

MyISAM: el motor de almacenamiento MySQL predeterminado y el que más se usa en Web, almacenamiento de datos y otros entornos de aplicaciones. MyISAM es compatible con todas las configuraciones de MySQL y es el motor de almacenamiento predeterminado a menos que haya configurado MySQL para usar uno diferente de forma predeterminada.

InnoDB: un motor de almacenamiento seguro para transacciones (compatible con ACID) para MySQL que tiene capacidades de confirmación, reversión y recuperación de fallos para proteger los datos del usuario. El bloqueo de nivel de fila de InnoDB (sin escalar a bloqueos de granularidad más gruesos) y las lecturas de no bloqueo consistentes al estilo de Oracle aumentan la concurrencia y el rendimiento de múltiples usuarios. InnoDB almacena los datos del usuario en índices agrupados para reducir la E / S para consultas comunes basadas en claves primarias. Para mantener la integridad de los datos, InnoDB también admite restricciones de integridad referencial de FOREIGN KEY.


Entonces, mientras instalamos MySQL, ¿necesitamos especificar específicamente qué motor de almacenamiento usar como nuestra base de datos MySQL?
user130561

3
Como mencioné en mi publicación, el valor predeterminado es MyISAM. Si desea utilizar las características de un motor de almacenamiento diferente como INNODB, entonces sí, deberá especificarlo. Esto no se hace durante la instalación, sino durante la creación inicial de la tabla.
mluebke

3
Pero según esto: - dev.mysql.com/doc/refman/5.7/en/storage-engines.html ; El motor predeterminado es InnoDB.
Harsha

2
Según dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html : "El motor predeterminado es InnoDB a partir de MySQL 5.5.5 (MyISAM antes de 5.5.5)" Por lo que el motor predeterminado es ahora InnoDB. Esta respuesta se publicó 16 días después del primer lanzamiento de disponibilidad general con InnoDB como motor predeterminado;)
SOFe

6

Quería agregar que tener la capacidad de especificar un motor de almacenamiento específico por tabla es una de las fortalezas clave de MySQL (además de la facilidad de uso y el buen rendimiento sin ajustes). Para todas las operaciones donde se necesitan transacciones, simplemente quédese con InnoDB. Sin embargo, MyISAM realmente puede acelerar las cosas cuando las transacciones no son necesarias en ciertas situaciones y requiere menos espacio en disco y RAM en comparación con InnoDB.

Dicho esto, InnoDB está mejorando todo el tiempo:

Mejoras de escalabilidad y rendimiento de InnoDB 1.1


4

MyISAM no sigue ACID a diferencia de InnoDB que sigue las transacciones para mantener la integridad de los datos.

MyISAM admite inserciones simultáneas: si una tabla no tiene bloques libres en el medio del archivo de datos, puede INSERTAR nuevas filas en ella al mismo tiempo que otros subprocesos leen de la tabla. MySqlDoc

Por eso, MyISAM es más rápido y ocupa menos espacio. Por ejemplo, MySQL MyISAM Storage Engine no admite transacciones. restricciones de MySQL MYISAM Hay un bit llamado concurrent-insert Por defecto, la variable se establece en 1 y las inserciones concurrentes se manejan como se acaba de describir. Si se establece en 0, las inserciones simultáneas están deshabilitadas. Si se establece en 2, se permiten inserciones simultáneas al final de la tabla incluso para tablas que tienen filas eliminadas. Se puede ejecutar una instrucción INSERT para agregar filas al final de la tabla con seleccionar al mismo tiempo si no hay huecos / filas eliminadas en el medio de la tabla (en el momento de la inserción simultánea).

El nivel de aislamiento predeterminado de mysql InnoDB es "Leer repetible". Para MyISAM, no hay transacción. InnoDB usa el bloqueo de nivel de fila, mientras que MyISAM solo puede usar el bloqueo de nivel de tabla, por eso InnoDB tiene una función de revocación de fallas mejor que MyISAM. Uno tiene que adquirir manualmente el bloqueo de nivel de tabla en MyISAM si desea evitar los efectos de concurrencia.


3

InnoDB es un motor de almacenamiento transaccional de MySQL, mientras que MyISAM es un motor de almacenamiento no transaccional. En otras palabras, InnoDB sigue las propiedades de ACID para mantener la integridad de los datos, pero MyISAM no sigue las propiedades de ACID, por lo que no mantiene la integridad de los datos.

En una tabla InnoDB (transaccional), los cambios transaccionales se pueden deshacer fácilmente si se requiere una reversión. Pero los cambios realizados en una tabla MyISAM (no transaccional) no se pueden deshacer cuando se requiere revertir una transacción.

Por ejemplo, desea transferir dinero de su cuenta corriente a una cuenta de ahorro. Esto se realiza mediante una transacción que incluye 5 consultas.

1 START TRANSACTION;
2 SELECT balance FROM checking WHERE customer_id = 10233276;
3 UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
4 UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
5 COMMIT;

Supongamos que el proceso se bloquea en el paso 4. Si se utiliza una tabla InnoDB aquí, una reversión desharía los cambios y se evita el riesgo de perder dinero. Literalmente, la tabla no tiene conocimiento de ningún bloqueo, ya que los cambios no se confirmarán en la tabla a menos que el paso 5 se ejecute correctamente.

Pero en el caso de una tabla MyISAM, no se pueden deshacer los cambios transaccionales cuando se llama a una reversión o si hay un bloqueo que provoque la falla de la transacción. Esto significa que, si la transacción falla en el paso 3, el dinero se deducirá de su cuenta corriente. Pero el dinero no se habría agregado a su cuenta de ahorros.

Ejemplo de cortesía: "MySQL de alto rendimiento: optimización, copias de seguridad y replicación" - Libro de Arjen Lentz, Derek J. Balling, Jeremy Zawodny, Peter Zaitsev y Vadim Tkachenko


1

Cuando su servidor MySQL falla, los datos se pueden recuperar mucho más fácilmente de un conjunto de tablas MyISAM que de ese gran archivo de transacciones InnoDB. Cada tabla MyISAM tiene un archivo separado, y si no se realizaron operaciones de escritura en esta tabla durante el bloqueo, no se verá afectado en absoluto. En el caso de InnoDB, todo el archivo de transacciones de todo el servidor MySQL debe volver a indexarse ​​o lo que sea que haga después de un bloqueo. Eso puede ser bastante complicado.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.