2011-07-03 15 views
8

A veces me preguntaron en algunas entrevistas: ¿qué ventajas tiene InnoDB contra MyISAM y cuándo MyISAM es mejor que InnoDB? Todo está claro sobre la primera parte de la pregunta: InnoDB es compatible con transacciones, bloqueo a nivel de fila en lugar de bloqueo a nivel de tabla, soporte de clave externa y algunos otros, estos puntos simplemente vinieron a la mente de inmediato.Cuando MyISAM es mejor que InnoDB?

¿Pero cuando MyISAM es realmente mejor que InnoDB?

Respuesta

13

MyISAM es mejor que InnoDB cuando no necesita esas funciones avanzadas y la velocidad de almacenamiento es más importante que otras preocupaciones. MyISAM también permite que se realicen búsquedas de texto completo dentro del motor de la base de datos, en lugar de tener que consultar resultados y luego buscarlos como una matriz o lo que sea en su aplicación.

InnoDB es una opción razonable si necesita almacenar datos con un alto grado de fidelidad con interacciones y relaciones complicadas. MyISAM es una opción razonable si necesita guardar o cargar una gran cantidad de registros en un período de tiempo reducido.

No recomendaría el uso de MyISAM para los datos que importan. Es ideal para campos de registro o comentarios o cualquier otra cosa en la que no le importe especialmente si un registro se desvanece. InnoDB es bueno para cuando se preocupa por sus datos, no necesita búsquedas rápidas y tiene para usar MySQL. También vale la pena mencionar que InnoDB admite el bloqueo a nivel de fila, mientras que MyISAM solo admite el bloqueo a nivel de tabla, lo que significa que para muchas situaciones comunes, InnoDB puede ser mucho más rápido debido a más consultas que se ejecutan en paralelo.

La línea inferior: Utilice InnoDB a menos que tenga que usar MyISAM. Alternativamente, desarrolle contra PostgreSQL y obtenga lo mejor de ambos.

+1

Depende aún. Si necesita garantías de ACID, ** MyIASM no es para usted **. Incluso si necesitas velocidad. –

+0

Realmente solo modifiqué mi publicación a tal efecto. Como mencioné en el texto editado, no puedo admitir el uso de MySQL en algo terriblemente importante. –

+0

Comencemos esta fiesta https://lxadm.com/MySQL:_Converting_all_tables_in_all_databases_from_MyISAM_to_InnoDB – Luka

4

MyISAM no admite transacciones (y las demás cosas mencionadas) por lo que puede funcionar más rápido. MyISAM es una forma de lograr un mayor rendimiento en aquellas situaciones en las que no necesita estas funciones.

+1

"Estas características" son todo lo que hace que un RDBMS sea un RDBMS: [ACID] ​​(http://en.wikipedia.org/wiki/Acid) (Es un poco hipérbole, pero aún así ...) –

+2

Believe Yo, cuando necesitas ese rendimiento extra, eliminar esas características de RDBMS-es suele ser el camino a seguir. Verifique las soluciones populares NoSQL actuales y resuelva lo que pensó sobre la necesidad de ACID. –

+0

El problema aquí es que MySQL los elimina de maneras que perjudican su capacidad de hacer el trabajo que se anuncia. MyISAM es famoso por consumir datos por razones esotéricas o desconocidas, y las populares soluciones NoSQL están logrando eliminar la lógica relacional sin destruir la funcionalidad. –

2

Hay algunas características que MySQL solo ha implementado para MyISAM (como la indexación de texto completo nativo).

Dicho esto, InnoDB sigue siendo mejor para la mayoría de las aplicaciones de producción.

+1

que también es un escenario válido, aunque un motor de búsqueda externo (lucene, sphinx) es probablemente una mejor solución para usar en estos casos –

1

También: La búsqueda de texto completo en mySQL solo se admite en tablas myISAM.

3

MyISAM es compatible con el texto completo, como se mencionó, pero también admite el tipo de tabla MERGE. Esto es útil cuando tiene una tabla grande y le gustaría "intercambiar"/archivar partes de ella periódicamente. Piense en los datos de registro o informe que desea conservar durante el último trimestre y/o año. MyISAM maneja grandes cantidades de datos como este mejor, cuando está insertando principalmente y rara vez actualizando o eliminando.

El rendimiento de InnoDB cae bastante rápido y dramáticamente una vez que no se pueden ajustar los índices en la memoria. Si su clave principal no va a ser un número (es decir, incremento automático), entonces quizás quiera replantearse el uso de InnoDB. La clave principal se replica para cada índice en una tabla InnoDB. Entonces, si tiene una clave principal grande y algunos otros índices, su tabla InnoDB se volverá muy grande muy rápido.

+1

En riesgo de sonar como un disco roto, fanboy - esta es la razón por la que cada vez que consigo hacer la llamada desarrollé contra PostgreSQL. La implementación de particiones de tabla es increíble. –

0

MyISAM tiene una estructura muy simple, en comparación con InnoDB. No hay versiones de filas, hay un archivo por tabla y las filas se almacenan secuencialmente.Sin embargo, si bien admite inserciones simultáneas (los SELECT y 1 INSERT se pueden ejecutar juntos), también tiene bloqueos a nivel de tabla (si hay 2 INSERT en la misma tabla, 1 tiene que esperar). Además, las ACTUALIZACIONES y ELIMINACIÓN son lentas debido a la estructura de los archivos de datos.

MyISAM no admite transacciones ni claves externas.

En general, MyISAM debería ser mejor si trabajas en tendencias generales (por lo que no te importa la exactitud de las filas individuales) y los datos se actualizan por la noche o nunca. Además, permite mover tablas individuales de un servidor a otro, a través del sistema de archivos.

InnoDB admite concurrencia y transacciones muy bien. Tiene un soporte decente para texto completo y un soporte casi decente para claves externas.

Cuestiones relacionadas