¿Cuál es la diferencia entre InnoDB y MyISAM?


17

Estoy usando MySQL como mi base de datos para mi proyecto web actual. Soy nuevo en MySQL. Por favor explíqueme la diferencia entre InnoDB y MyISAM.


siéntase libre de agregar también un tagg MySQL :)
Johan

¿No pertenece esto en stackoverflow?
ripper234

@ ripper234. Existen dos versiones mejores de esta publicación (muchos más antecedentes; más demostraciones de investigaciones anteriores) en SO: stackoverflow.com/q/12614541/209139 y stackoverflow.com/q/20148/209139 .
TRiG

Respuestas:


14

ISAM = Método de acceso secuencial indexado y es esencialmente un archivo plano (para aquellos DBA que pueden recordar, pensar Btrieve o B-Tree). Es una tecnología muy antigua, pero no dejes que eso te desanime de usarla. Debido a que es un archivo plano (más sobre eso más adelante), no es relacional, y por lo tanto no es un RDBMS, y por lo tanto es más apropiado en algunas situaciones.

InnoDB es el RDBMS completo con el que probablemente esté familiarizado. MyISAM puede parecer relacional a través de otra capa agregada en la parte superior que mantiene sus enlaces, lógica e integridad referencial.

ISAM es brillante si tiene MUCHOS registros (como 20 millones), y los registros son en su mayoría independientes (es decir, no necesita hacer muchos enlaces para recuperar los datos asociados). Se basa MUY en los índices y si no tiene el índice correcto, prepárese para tiempos de consulta muy largos. Caso en cuestión: teníamos una tabla Btrieve ISAM con más de 20 millones de registros y hacer una recuperación y filtrar datos basados ​​en un índice preciso fue casi instantáneo. Usar el índice incorrecto fue literalmente 15 minutos.

InnoDB es ideal si tienes muchos enlaces relacionales. La Tabla A hace referencia a un campo en la Tabla B, que hace referencia a la Tabla C y D. InnoDB puede obtener estos registros utilizando todo tipo de métodos de unión agradables (combinaciones hash, etc.), mientras que una base de datos ISAM tendría que ejecutar múltiples subconsultas para cada una remar y unir los registros manualmente.

¡Realmente tendrás que hacer un curso en bases de datos si quieres mucho más detalles que eso!


ISAM es tan relacional como cualquier otra cosa, simplemente no está optimizado para ello.
LapTop006

Gracias 4 su breve descripción. Ahora básicamente estoy autorizado

5

Lo más fundamental es que InnoDB es transaccional. MyIsam no lo es. MyIsam generalmente es un poco más rápido, por lo que si no necesita transacciones, esa es generalmente su mejor opción. Para obtener descripciones detalladas, debe leer la documentación de MySQL.


2

En estos días, a menos que esté utilizando una tabla para datos de estilo de registro (muchos más INSERTAR que SELECCIONAR, sin transacciones) InnoDB suele ser más rápido, más confiable, tiene más funciones, etc.

La única otra característica que tiene MyISAM es la búsqueda de texto completo que está bien para el uso básico, pero la mayoría de las personas usan algunas de Lucene para algo serio.

De cualquier manera, debe ajustar MySQL ya que los valores predeterminados están configurados esencialmente para un pentium de 32 MB que se comparte con otros servicios.


2

Un poco tarde para el juego ... pero aquí hay una publicación bastante completa que escribí hace unos meses , que detalla las principales diferencias entre MYISAM e InnoDB. Agarra una cuppa (y tal vez una galleta) y disfruta.


La principal diferencia entre MyISAM e InnoDB está en la integridad referencial y las transacciones. También hay otra diferencia, como bloqueo, reversiones y búsquedas de texto completo.

Integridad referencial

La integridad referencial asegura que las relaciones entre las tablas se mantengan consistentes. Más específicamente, esto significa que cuando una tabla (p. Ej., Listados) tiene una clave externa (p. Ej., ID de producto) que apunta a una tabla diferente (p. Ej., Productos), cuando se producen actualizaciones o eliminaciones en la tabla señalada, estos cambios se conectan en cascada al enlace mesa. En nuestro ejemplo, si se cambia el nombre de un producto, las claves externas de la tabla de enlace también se actualizarán; Si un producto se elimina de la tabla 'Productos', también se eliminará cualquier listado que apunte a la entrada eliminada. Además, cualquier listado nuevo debe tener esa clave externa que apunte a una entrada válida y existente.

InnoDB es un DBMS relacional (RDBMS) y, por lo tanto, tiene integridad referencial, mientras que MyISAM no.

Transacciones y Atomicidad

Los datos en una tabla se administran utilizando instrucciones del lenguaje de manipulación de datos (DML), como SELECT, INSERT, UPDATE y DELETE. Una transacción agrupa dos o más sentencias DML en una sola unidad de trabajo, por lo que se aplica la unidad completa o no se aplica ninguna.

MyISAM no admite transacciones, mientras que InnoDB sí.

Si se interrumpe una operación mientras se usa una tabla MyISAM, la operación se interrumpe inmediatamente y las filas (o incluso los datos dentro de cada fila) que se ven afectados permanecen afectados, incluso si la operación no se completó.

Si una operación se interrumpe mientras se usa una tabla InnoDB, debido a que usa transacciones, que tiene atomicidad, cualquier transacción que no se completó no tendrá efecto, ya que no se realiza ninguna confirmación.

Bloqueo de mesa vs bloqueo de fila

Cuando una consulta se ejecuta en una tabla MyISAM, se bloqueará toda la tabla en la que se está consultando. Esto significa que las consultas posteriores solo se ejecutarán una vez que finalice la actual. Si está leyendo una tabla grande, y / o hay operaciones frecuentes de lectura y escritura, esto puede significar una gran acumulación de consultas.

Cuando una consulta se ejecuta contra una tabla InnoDB, solo las filas involucradas están bloqueadas, el resto de la tabla permanece disponible para operaciones CRUD. Esto significa que las consultas pueden ejecutarse simultáneamente en la misma tabla, siempre que no utilicen la misma fila.

Esta característica en InnoDB se conoce como concurrencia. Por grande que sea la concurrencia, hay un inconveniente importante que se aplica a un rango selecto de tablas, ya que hay una sobrecarga en el cambio entre hilos del núcleo, y debe establecer un límite en los hilos del núcleo para evitar que el servidor se detenga .

Transacciones y Rollback

Cuando ejecuta una operación en MyISAM, se establecen los cambios; en InnoDB, esos cambios pueden revertirse. Los comandos más comunes utilizados para controlar las transacciones son COMMIT, ROLLBACK y SAVEPOINT. 1. COMMIT: puede escribir varias operaciones DML, pero los cambios solo se guardarán cuando se realice un COMMIT 2. ROLLBACK: puede descartar cualquier operación que aún no se haya confirmado 3. SAVEPOINT: establece un punto en la lista de operaciones a las que una operación ROLLBACK puede revertir a

Fiabilidad

MyISAM no ofrece integridad de datos: las fallas de hardware, los cierres sucios y las operaciones canceladas pueden provocar que los datos se corrompan. Esto requeriría una reparación completa o reconstrucciones de los índices y las tablas.

InnoDB, por otro lado, utiliza un registro de transacciones, un búfer de doble escritura y una suma de verificación y validación automática para evitar la corrupción. Antes de que InnoDB realice ningún cambio, registra los datos antes de las transacciones en un archivo de espacio de tabla del sistema llamado ibdata1. Si hay un bloqueo, InnoDB se recuperaría automáticamente mediante la reproducción de esos registros.

Indexación FULLTEXT

InnoDB no admite la indexación FULLTEXT hasta MySQL versión 5.6.4. Al momento de escribir esta publicación, la versión MySQL de muchos proveedores de alojamiento compartido todavía está por debajo de 5.6.4, lo que significa que la indexación FULLTEXT no es compatible con las tablas InnoDB.

Sin embargo, esta no es una razón válida para usar MyISAM. Es mejor cambiar a un proveedor de alojamiento que admita versiones actualizadas de MySQL. No es que una tabla MyISAM que utiliza la indexación FULLTEXT no se pueda convertir en una tabla InnoDB.

Conclusión

En conclusión, InnoDB debería ser su motor de almacenamiento predeterminado preferido. Elija MyISAM u otros tipos de datos cuando satisfagan una necesidad específica.


1

En general, la regla general es, si quieres velocidad, usa MyISAM y si quieres estabilidad, usa InnoDB. Algo relacionado con la atomicidad si no recuerdo mal.


3
Excecpt que ya no es cierto, InnoDB es realmente más rápido en la mayoría de los casos.
LapTop006

1
¿Alguien puede agregar un enlace algunos puntos de referencia o algo así ...
Johan
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.