transacciones tablas soporta por motor migradas glpi establece ejemplos defecto datos cambiar activar mysql database-design innodb myisam

mysql - tablas - myisam vs innodb



¿Siempre debería preferir MySQL InnoDB sobre MyISAM? (6)

En mi humilde opinión, siempre debería preferir InnoDB sobre MyISAM debido al soporte transaccional que está en el corazón de cada sistema de base de datos relacional.

Alguien me acaba de decir que InnoDB es mucho mejor que MyISAM. Entonces, cuando creo una tabla, ¿ siempre debería intentar usar InnoDB Engine en lugar de MyISAM? ¿O ambos tienen grandes beneficios?


InnoDB es un motor de base de datos totalmente compatible con ACID y, por lo tanto, ofrece soporte para transacciones, etc. Por lo tanto, puede ser más lento que la base de datos MyISAM, que tiende a ser optimizada en una dirección diferente.

Por lo tanto, si necesita transacciones InnoDB (u otro RDBMS como PostgreSQL) es la opción obvia.

Hay una comparación razonable en Wikipedia


Para hacerlo mas simple:

Debe utilizar InnoDB:

  • si necesita soporte de transacción
  • si necesitas llaves extranjeras

Debe utilizar MyISAM:

  • si no necesitas lo anterior y
  • necesitas velocidad (operaciones de base de datos más rápidas)

Podrías usar ambos. Puede usar InnoDB para sus transacciones / base de datos de escritura, pero volver a leer desde una base de datos MyISAM, que está desnormalizada. Esto da lo mejor de ambos mundos. Sabe que sus datos están seguros con la integridad referencial de InnoDB, y puede leerlos tan rápido como lo desee con MyISAM.


Respuesta simple: No, no deberías.

Algunos puntos sobre cada motor:

InnoDB

  • Soporte completo para restricciones y transacciones de clave externa. (ACID compatible)
  • Bloqueo a nivel de fila.
  • Posiblemente más rápidas instrucciones INSERT. (Y posiblemente ACTUALIZAR también)

MyISAM

  • Comandos SELECT más rápidos.
  • Soporte para búsquedas de texto completo
  • Las columnas BLOB y TEXT pueden ser indexadas
  • Límite de almacenamiento máximo de 4x, en comparación con InnoDB (256TB vs 64TB)

Ver más en el Manual:


MyISAM tiene transacciones y está organizado en montón. Los registros se identifican por el desplazamiento de fila en la tabla y los índices almacenan este desplazamiento como un puntero de fila.

InnoDB admite transacciones y está organizado por índices. Los registros se identifican por el valor de la PRIMARY KEY (o una columna interna oculta si no hay una PRIMARY KEY definida) y se almacenan en un B-Tree . Los índices secundarios almacenan el valor de la PRIMARY KEY como un puntero de fila.

Las consultas que involucran exploraciones de tablas completas o búsquedas de índices secundarias suelen ser más rápidas en las tablas MyISAM .

Las consultas que involucran búsquedas de PRIMARY KEY suelen ser más rápidas en las tablas de InnoDB .

MyISAM tablas MyISAM almacenan el número de registros en la tabla en los metadatos de la tabla, por eso las consultas son las siguientes:

SELECT COUNT(*) FROM myisamtable

son instantaneas

MyISAM tablas MyISAM están completamente bloqueadas en las operaciones DML (con varias excepciones).

InnoDB tablas InnoDB bloquean los registros individuales y las brechas de índice, sin embargo, estos son los registros y las brechas que se escanean, no solo los que coinciden con la condición WHERE . Esto puede hacer que los registros se bloqueen a pesar del hecho de que no coinciden.

InnoDB tablas InnoDB admiten integridad referencial ( FOREIGN KEY ). MyISAM tablas de MyISAM no lo hacen.

Hay varios escenarios que pueden mostrar los beneficios de ambos motores.