MySql: MyISAM vs. Inno DB!

¿Cuáles son las diferencias entre los tipos MyISAM e Inno DB en MySql?

La principal diferencia es que InnoDB admite transacciones mientras que MyISAM no.

Existen muchas otras diferencias, sin embargo, la común de la que soy consciente son:

  • MyISAM generalmente se ha considerado más rápido en la búsqueda, pero las mejoras recientes de InnoDB están eliminando esta diferencia y mejorando el alto rendimiento de la carga de trabajo de concurrencia
  • InnoDB admite transacciones mientras que MyISAM no
  • InnoDB admite integridad referencial mientras MyISAM no
  • InnoDB maneja los índices de una manera un poco diferente, almacenando la clave principal como parte de cada índice (lo que hace que los índices ocupen más espacio en el disco, pero también hace que sea más probable que sea un índice de cobertura)
  • MyISAM hace el locking del nivel de la tabla, mientras que InnoDB puede hacer el locking del nivel de la fila
  • Se utilizan diferentes configuraciones de memoria / búfer / índice en los archivos de configuración de MySQL
  • InnoDB generalmente se dice que tiene una mejor recuperación de fallos
  • Como se menciona en otra respuesta, los datos se almacenan en el disco de forma diferente. Creo que InnoDB es configurable en esta área y puede tener un archivo por tabla, etc. si es necesario

Estoy seguro de que una búsqueda en Google o el sitio de MySQL mostrarán muchas otras diferencias en más detalle.

InnoDB y MyISAM

Características y comparación de rendimiento:

  1. InnoDB es más nuevo mientras MyISAM es más antiguo.
  2. InnoDB es más complejo, mientras que MyISAM es más simple.
  3. InnoDB es más estricto en integridad de datos mientras MyISAM está suelto.
  4. InnoDB implementa el locking a nivel de fila para insertar y actualizar mientras MyISAM implementa el locking a nivel de tabla.
  5. InnoDB tiene transacciones mientras MyISAM no.
  6. InnoDB tiene claves externas y restricciones de relación, mientras que MyISAM no.
  7. InnoDB tiene una mejor recuperación de fallos, mientras que MyISAM es pobre en la recuperación de la integridad de los datos en los fallos del sistema.
  8. MyISAM tiene índice de búsqueda de texto completo, mientras que InnoDB no.

A la luz de estas diferencias, InnoDB y MyISAM tienen sus ventajas y desventajas únicas entre sí. Cada uno es más adecuado en algunos escenarios que el otro.

Ventajas de InnoDB

  1. InnoDB se debe utilizar cuando la integridad de los datos sea una prioridad, ya que de forma inherente se ocupa de ellos mediante restricciones y transacciones relacionadas.
  2. Más rápido en tablas de escritura intensiva (inserciones, actualizaciones) porque utiliza el locking a nivel de fila y solo guarda cambios en la misma fila que se inserta o actualiza.

Desventajas de InnoDB

  1. Debido a que InnoDB debe encargarse de las diferentes relaciones entre tablas, el administrador de la base de datos y los creadores de esquemas deben dedicar más tiempo a diseñar modelos de datos que son más complejos que los de MyISAM.
  2. Consume más recursos del sistema, como RAM. Como cuestión de hecho, muchos recomiendan que el motor InnoDB se apague si no hay una necesidad sustancial después de la instalación de MySQL.
  3. Sin indexación de texto completo.

Ventajas de MyISAM

  1. Más simple de diseñar y crear, por lo tanto, mejor para los principiantes. No se preocupe por las relaciones extranjeras entre tablas.
  2. Más rápido que InnoDB en general como resultado de una estructura más simple, lo que reduce los costos de los recursos del servidor.
  3. Indización de texto completo.
  4. Especialmente bueno para tablas de lectura intensiva (select).

Desventajas de MyISAM

  1. No se verifica la integridad de los datos (por ejemplo, las restricciones de las relaciones), lo que a su vez es una responsabilidad y una sobrecarga de los administradores de la base de datos y los desarrolladores de aplicaciones.
  2. No admite transacciones que son esenciales en aplicaciones de datos críticos como la banca.
  3. Más lento que InnoDB para las tablas que se insertan o actualizan frecuentemente, porque toda la tabla está bloqueada para cualquier inserción o actualización.

La comparación es bastante simple. InnoDB es más adecuado para situaciones de datos críticos que requieren inserciones y actualizaciones frecuentes. MyISAM, por otro lado, funciona mejor con aplicaciones que no dependen de la integridad de los datos y, en su mayoría, solo seleccionan y muestran los datos.

Referencia: Comparación InnoDB y MyISAM

También puede consultarlo aquí para obtener más detalles: MyISAM o el motor InnoDB MySQL?

Espero que esto ayude.

MyISAM admite indexación de texto completo (no estándar-SQL) que InnoDB aún no hace. Esta es la única razón por la que alguna vez usamos MyISAM hoy.

La diferencia más importante entre MyISAM e InnoDB es que InnoDB admite transacciones y claves externas. Si necesita claves externas y funcionalidades relacionadas (por ejemplo, eliminaciones en cascada automáticamente), necesitará usar InnoDB.

InnoDB es más lento que MyISAM para la mayoría de los usos, pero puede funcionar más rápido en ciertas condiciones debido a un mejor mecanismo de locking; MyISAM bloquea toda la tabla para leer mientras se están ejecutando inserciones / actualizaciones. InnoDB puede hacer el locking a nivel de fila, lo que permite múltiples escrituras simultáneas y lectura en la tabla.

Puede obtener más información sobre MyISAM e InnoDB en la documentación de MySQL:

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

http://dev.mysql.com/doc/refman/5.1/en/innodb-overview.html

La principal diferencia es que InnoDB admite transacciones , mientras que MyISAM no lo hace.

MyISAM e InnoDB también almacenan sus datos en el disco de manera diferente. MyISAM utiliza un archivo de datos y un archivo de índice para cada tabla, almacenados en un directorio con el nombre de la base de datos. InnoDB parece agrupar todo en un archivo llamado ibdata1.

Soporte NFS

A diferencia de MyISAM, InnoDB puede tener problemas en NFS.

Desde la configuración de InnoDB (MySQL versión 5.5)

Precaución

Si la confiabilidad es una consideración para sus datos, no configure InnoDB para usar archivos de datos o archivos de registro en volúmenes NFS. Los problemas potenciales varían de acuerdo con el sistema operativo y la versión de NFS, e incluyen problemas tales como la falta de protección contra escrituras en conflicto y limitaciones en el tamaño máximo de archivos.

Características de InnoDB 1. Proporciona capacidad de transacción completa con cumplimiento completo de ACID (atomicidad, consistencia, aislamiento y durabilidad).

  1. Tiene locking de nivel de fila. Al admitir el locking de nivel de fila, puede agregar datos a una tabla InnoDB sin que el motor bloquee la tabla con cada inserción y esto acelera tanto la recuperación como el almacenamiento de la información en la base de datos.

  2. La clave del sistema InnoDB es una estructura de base de datos, almacenamiento en caché e indexación donde los índices y los datos se almacenan en memoria caché y se almacenan en el disco. Esto permite una recuperación muy rápida y funciona incluso en conjuntos de datos muy grandes.

  3. InnoDB admite restricciones de clave externa

  4. InnoDB es compatible con la recuperación automática de fallos
  5. InnoDB es compatible con la compresión de tablas (lectura / escritura)
  6. InnoDB admite tipos de datos espaciales (sin índices espaciales)

  7. Innodb admite ANALYZE TABLE sin locking y solo se requiere cuando el servidor se ha estado ejecutando durante un tiempo prolongado, ya que se sumerge en las estadísticas del índice y obtiene la información del índice cuando se abre la tabla.

  8. Innodb no tiene archivos de índice separados, por lo que no es necesario abrirlos.

  9. Innodb construye sus índices una fila a la vez en orden de clave primaria (después de ALTER), lo que significa que los árboles de índice no están construidos en un orden óptimo y están fragmentados. Actualmente no hay forma de desfragmentar los índices de InnoDB, ya que InnoDB no puede construir índices ordenando en MySQL 5.0. Incluso descartar y volver a crear índices InnoDB puede dar como resultado índices fragmentados, según los datos.

  10. Una tabla puede contener un máximo de 1000 columnas.

  11. La longitud de la clave máxima interna de InnoDB es de 3500 bytes, pero MySQL restringe esto a 3072 bytes. (1024 bytes para versiones que no sean de 64 bits antes de MySQL 5.0.17, y para todas las comstackciones anteriores a 5.0.15).

  12. El tamaño de página predeterminado de la base de datos en InnoDB es de 16 KB. Al volver a comstackr el código, puede establecerlo en valores que oscilan entre 8 KB y 64 KB. Debe actualizar los valores de UNIV_PAGE_SIZE y UNIV_PAGE_SIZE_SHIFT en el archivo de origen de univ.i.
  13. Las tablas InnoDB no son compatibles con los índices FULLTEXT.

    Características de MYISAM

    1. Sin soporte de transacciones
    2. Nivel de locking de tabla
    3. Proporciona búsqueda de texto completo
    4. Sin límite de datos en la tabla.
    5. conteo rápido (*) s (cuando DONDE, agrupar por o unir no se usa)
    6. indización de texto completo
    7. huella de disco más pequeña
    8. compresión de tabla muy alta (solo lectura)
    9. tipos de datos espaciales e índices (árbol-R)
  14. Al usar DATA DIRECTORY = ‘/ path / to / data / directory’ o INDEX DIRECTORY = ‘/ path / to / index / directory’ puede especificar dónde debe colocar el motor de almacenamiento MyISAM el archivo de datos y el índice de una tabla. El directorio debe ser el nombre completo de la ruta al directorio, no una ruta relativa.

Puede encontrar más detalles en http://faisalbhagat.blogspot.com/2014/09/innodb-vs-myisam.html

Aquí hay una descripción de las diferencias entre InnoDB y MyIsam:

Diferencias entre InnoDB y MyIsam

Pocas diferencias:

  • MYISAM no admite ninguna transacción de base de datos
  • INNODB proporcionará transacciones
  • MYISAM proporciona un locking de nivel de tabla,
  • INNODB proporciona un locking de nivel de fila
  • INNOBD admite claves externas, MYISAM no …

MyISAM es más conveniente cuando se trata de copias de seguridad, ya que es bastante simple bloquear todas las tablas y copiar los archivos directamente en el sistema de archivos. (mysqlhotcopy que es un script perl es incluso parte de mysql afaik)

InnoDB es un poco más complejo y copiar los archivos no funcionará, ya que no se pueden restaurar en otra máquina listos para usar.

Sin embargo, hay software comercial que ofrece InnoDB hotcopying.

Si bien el soporte de transacción es la principal diferencia, el locking a nivel de tabla puede ser un problema si tiene consultas SELECT de larga ejecución mezcladas con sentencias UPDATE .