¿Cuáles son las principales diferencias entre InnoDB y MyISAM?


180

¿Cuáles son las principales diferencias entre InnoDB y MyISAM?

+13

Si quieres un motor de base de datos, usa InnoDB.[No puede comparar los dos] (https://jeremystein.com/journal/innodb-versus-myisam-no-comparison/). 10 ene. 132013-01-10 15:12:50

112

La primera diferencia importante que veo es que InnoDB implementa el bloqueo a nivel de fila, mientras que MyISAM solo puede hacer un bloqueo a nivel de tabla.Encontrará una mejor recuperación de fallos en InnoDB.Sin embargo, no tiene FULLTEXT índices de búsqueda hasta v5.6, al igual que MyISAM.InnoDB también implementa transacciones, claves externas y restricciones de relación, mientras que MyISAM no lo hace.

La lista puede ir un poco más lejos.Sin embargo, ambos tienen sus ventajas únicas a su favor y sus desventajas entre sí.Cada uno de ellos es más adecuado en algunos escenarios que el otro.

Para resumir (TL; DR):

  • InnoDB tiene bloqueo a nivel de fila, MyISAM solo puede hacer bloqueo completo a nivel de tabla.
  • InnoDB tiene mejor recuperación de fallos.
  • MyISAM tiene FULLTEXT índices de búsqueda, InnoDB no tuvo hasta MySQL 5.6 (febrero de 2013).
  • InnoDB implementa transacciones, claves externas y restricciones de relación, MyISAM no.
  0

Querido señor, entonces, ¿qué usaremos?¿MyISAM o InnoDB?Estoy totalmente confundido ... mi sitio web está usando mysql y necesito decidir esto. 30 ago. 122012-08-30 11:44:30

+2

depende de la aplicación, escriba una lista con las características que necesitará (por ejemplo, búsqueda de texto completo, claves externas ...) y trate de decidir una (intente calificar cada característica y luego cuente la puntuación).no podrá tenerlos todos, pero depende de usted decidir qué función de bruja es la más necesaria. 30 ago. 122012-08-30 12:14:29

+2

Edité su post para aclararlo. 23 jul. 132013-07-23 06:24:14

+1

@MathiasLykkegaardLorenzen gracias, esa es una de las razones por las que nos gusta apilar intercambiar 25 jul. 132013-07-25 23:37:26

  0

a partir de 'versión 5.6.4' InnoDB soporta la búsqueda' FULLTEXT'.https://dev.mysql.com/doc/refman/5.6/en/fulltext-restrictions.html 02 nov. 142014-11-02 04:34:25

  0

InnoDB no recuerda los valores de incremento automático (los olvida al reiniciar). 10 feb. 182018-02-10 03:26:03

  0

@sqlchild, si el servidor web absorbe los datos del cliente, y utiliza mejor InnoDB, la función de clave externa es esencial para mantener su base de datos en un estado coherente. 03 mar. 182018-03-03 19:08:23


16

En mi experiencia, la diferencia más significativa es la forma en que cada motor maneja el bloqueo.InnoDB usa el bloqueo de filas mientras que MyISAM usa el bloqueo de tablas.Como regla general, uso InnoDB para escribir tablas pesadas y MyISAM para leer tablas pesadas.

Otras diferencias importantes incluyen:

  1. InnoDB admite transacciones y claves externas.MyISAM no lo hace.
  2. MyISAM utiliza la indexación de texto completo.
  3. MyISAM hace un mal trabajo de hacer cumplir la integridad de los datos.

7

Tiendo a ver MyISAM como la opción de tabla "predeterminada" para MySQL, así que señalaré las diferencias para la mayoría de los usuarios de InnoDB

  • Bloqueo de nivel de fila
  • Ejecución de clave externa
  • Soporte de transacciones
  • Rendimiento golpeado en sistemas de alto uso
+4

excepto que la última versión de MySQL ya no usa MyISAM como motor predeterminado.En 5.5 cambiaron el valor predeterminado a InnoDB :).Y no estoy de acuerdo con la generalización de que InnoDB en general solo obtiene un 'hit de rendimiento'.Las tablas InnoDB bien diseñadas con la indexación adecuada y las configuraciones de memoria bien configuradas pueden hacer que una tabla InnoDB funcione tan bien como el mismo esquema en MyISAM. 24 jun. 112011-06-24 13:44:30

+3

En muchas situaciones de "alto uso", InnoDB realmente funciona [mucho mejor] (http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/) que MyISAM.MyISAM es una herramienta específica para un problema específico, mientras que InnoDB le servirá mejor en la mayoría de las situaciones (de ahí que el equipo de MySQL lo haya convertido en el motor predeterminado).Debido a que MyISAM fue el único motor durante mucho tiempo, la comunidad MySQL se convirtió en el hábito de usar MyISAM de forma predeterminada, incluso después de la maduración de InnoDB. 15 ago. 112011-08-15 19:53:08

+2

La búsqueda FULLTEXT de InnoDB se agregó en parte a lo largo del ciclo de desarrollo de MySQL 5.6.[La URL citada] (http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html) ahora también cubre InnoDB. 20 dic. 122012-12-20 06:52:59


26

Una cosa más: puede hacer una copia de seguridad de las tablas de InnoDB simplemente tomando una instantánea del sistema de archivos.La copia de seguridad de MyISAM requiere el uso de mysqldump y no se garantiza que sea coherente (por ejemplo, si inserta en una tabla principal y secundaria, es posible que solo encuentre la fila de la tabla secundaria en su copia de seguridad).

Básicamente, si tiene otra copia de los datos y solo la almacena en caché en MySQL, por ejemplo, para permitir un medio estándar de acceso desde un sitio web de PHP, MyISAM está bien (es decir, es mejor que un archivo CSV plano o un archivo de registro para consultas y acceso concurrente).Si la base de datos es la "copia maestra" real de los datos, si está utilizando INSERT y UPDATE usando datos reales de los usuarios, es una tontería usar cualquier otra cosa que no sea InnoDB, en cualquier escala MyISAM no es confiable y es difícil de administrar , harás myisamchk mitad del tiempo, negando cualquier ganancia de rendimiento ...

(Mi experiencia personal: una base de datos de 2 terabytes en MyISAM).


64

Otra diferencia importante que aún no se ha mencionado es cómo se realiza el almacenamiento en caché para cada motor de almacenamiento.

MYISAM

El principal mecanismo utilizado es el caché de claves.Solo almacena en caché las páginas de índice de archivos .MYI.Para dimensionar su caché de claves, ejecute la siguiente consulta:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;

Esto le dará la configuración recomendada para MyISAM Key Cache (key_buffer_size) dado su conjunto de datos actual (the query will cap the recommendation at 4G (4096M).Para el sistema operativo de 32 bits, 4 GB es el límite.Para 64 bits, 8GB.

InnoDB

El principal mecanismo utilizado es el InnoDB Buffer Pool.Almacena en caché los datos y las páginas de índice de las tablas InnoDB a las que se accede.Para dimensionar su grupo de búferes InnoDB, ejecute la siguiente consulta:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;

Esto proporcionará la configuración recomendada para el tamaño del conjunto de búferes InnoDB (innodb_buffer_pool_size) dado su actual conjunto de datos.

No olvide cambiar el tamaño de los archivos de registro de InnoDB (ib_logfile0 y ib_logfile1).El código fuente de MySQL coloca un límite de los tamaños combinados de todos los archivos de registro de InnoDB debe ser <4G (4096M). Por simplicidad, dados solo dos archivos de registro, aquí se muestra cómo puede dimensionarlos:

  • Paso 1) Agregar innodb_log_file_size = NNN a /etc/my.cnf(NNN debe ser el 25% de innodb_buffer_pool_size o 2047M, el que sea menor)
  • Paso 2)service mysql stop
  • Paso 3)rm /var/log/mysql/ib_logfile[01]
  • Etapa 4)service mysql start(Se recrean ib_logfile0 y ib_logfile1)

ADVERTENCIA

Al final de ambas consultas hay una consulta en línea.(SELECT 2 PowerOf1024)segundo

  • (SELECT 0 PowerOf1024)da el ajuste en bytes
  • (SELECT 1 PowerOf1024)da el escenario en kilobytes
  • (SELECT 2 PowerOf1024)da la configuración en megabytes
  • (SELECT 3 PowerOf1024)da la configuración en gigabytes
  • No se aceptan potencias menores a 0 o mayores a 3.

EPÍLOGO

No hay sustituto para el sentido común.Si tiene memoria limitada, una mezcla de motores de almacenamiento o una combinación de estos, tendrá que adaptarse a diferentes escenarios.

  • Si tiene 2 GB de RAM y 16 GB de InnoDB, asigne 512M como innodb_buffer_pool.
  • Si tiene 2GB de RAM y 4GB de Índices de MyISAM, asigne 512M como key_buffer_size.
  • Si tiene 2 GB de RAM y 4 GB de Índices MyISAM e 16 GB de InnoDB, asigne 512M como key_buffer_size y 512M como innodb_buffer_pool_size.

Los posibles escenarios son infinitos !!!

Recuerde, independientemente de lo que asigne, deje suficiente RAM para las conexiones de base de datos y el sistema operativo.

  0

¡Esas son malas fórmulas! 23 jun. 112011-06-23 00:06:29

  0

(Vaya, sigue olvidando que no puede haber párrafos) ... Agregaré una "respuesta". 23 jun. 112011-06-23 00:07:21

  0

De hecho, le di a @Rick un +1 por su respuesta con respecto a los entornos con poca memoria.Mi respuesta, incluso utilizando su URL desde su respuesta, ha sido confirmada como correcta.Desde aquí lo dejo a la comunidad DBA.SE para juzgar todas las respuestas en su contexto completo.Gracias !!! 23 jun. 112011-06-23 02:51:42

  0

Las fórmulas de Rolando para los tamaños de caché no son prácticas.- No se necesitan potencias de 2.- 4 GB en un sistema operativo de 32 bits es imposible. .) 23 jun. 112011-06-23 00:13:03

+2

@Rick: Las potencias de 2 estaban destinadas a mostrar las respuestas en diferentes unidades.Doing (SELECT 2 PowerOfTwo) establece la visualización de la respuesta en MB.Haciendo (SELECCIONA 3 PowerOfTwo) Establece la pantalla en GB.(SELECCIONE 1 PowerOfTwo) Muestra en KB.(SELECCIONAR 0 PowerOfTwo) Muestra en Bytes.Eso es lo que hace (SELECT 2 PowerOfTwo).Por lo tanto, es necesario MOSTRAR SOLAMENTE, no imponer ningún valor asumido en la arquitectura. 23 jun. 112011-06-23 02:25:59

  0

@Rick: La documentación del sitio web de MySQL dice 4GB Max para SO de 32 bits: La configuración máxima permitida para key_buffer_size es de 4GB en plataformas de 32 bits.Se permiten valores superiores a 4 GB para plataformas de 64 bits.El tamaño máximo efectivo podría ser menor, dependiendo de la RAM física disponible y los límites de RAM por proceso impuestos por su sistema operativo o plataforma de hardware.El valor de esta variable indica la cantidad de memoria solicitada.Internamente, el servidor asigna la mayor cantidad de memoria posible hasta esta cantidad, pero la asignación real podría ser menor. 23 jun. 112011-06-23 02:30:58

  0

@Rick: Eso es lo que dice esta URL (http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_key_buffer_size), directamente desde la documentación de MySQL.Si la documentación es incorrecta, informe a MySQL (eh Oracle). 23 jun. 112011-06-23 02:32:19

  0

@Rick: Incluso su URL (http://mysql.rjweb.org/doc.php/memory) dice claramente: Primero, el sistema operativo (y el hardware?) Puede conspirar para no permitirle usar los 4GB, si eso es lo que tienes.Si tiene más de 4 GB de RAM, el exceso de más de 4 GB es _totalmente_ inaccesible e inutilizable.Esto es exactamente lo que 4GB es correcto de la documentación de MySQL y su propia URL que citó. 23 jun. 112011-06-23 02:37:15

+2

@Rick: ¿Sabes qué?De hecho, te daré un +1 por dos razones muy grandes.1) Su URL confirma que mi respuesta fue correcta, ya que 4 GB es el número más grande para asignar a key_buffer_size.2) Su respuesta, con su URL, tiene sentido para las máquinas con muy poca memoria.Daré crédito donde el crédito es debido. 23 jun. 112011-06-23 02:41:27

  0

@Rick: No quiero ser detallado, pero si hubiera leído mi nota final de mi respuesta, habría visto que declaro claramente usando 512MB para innodb_buffer_pool_size y key_buffer_size.Intento conservador con ambientes de poca memoria.Soy plenamente consciente de que las fórmulas como la mía no son absolutas. 23 jun. 112011-06-23 02:48:45


42

InnoDB ofrece:

  • Transacciones ACID
  • bloqueo a nivel de fila
  • restricciones de clave externa
  • recuperación automática de fallos
  • compresión de tablas (lectura/escritura)
  • tipos de datos espaciales (sin índices espaciales)

En InnoDB, todos los datos en una fila, excepto TEXT y BLOB, pueden ocupar un máximo de 8,000 bytes.La indexación de texto completo no está disponible en InnoDB hasta MySQL 5.6 (febrero de 2013).En InnoDB el COUNT(*) s (cuando no se usa WHERE , GROUP BY , o JOIN) se ejecuta más lentamente que en MyISAM porque el recuento de filas no se almacena internamente.InnoDB almacena tanto los datos como los índices en un archivo.InnoDB utiliza un grupo de búferes para almacenar en caché los datos y los índices.

MyISAM ofrece:

  • rápido COUNT(*) s (cuando WHERE , GROUP BY , o JOIN no se utiliza)
  • indexación de texto completo (actualización: compatible con InnoDB desde MySQL 5.6)
  • menor tamaño de disco
  • Compresión de mesa muy alta (solo lectura)
  • tipos de datos espaciales e índices (árbol R) (actualización: compatible con InnoDB desde MySQL 5.7)

MyISAM tiene un bloqueo de nivel de tabla, pero ningún bloqueo de nivel de fila.No hay transacciones.No hay recuperación automática de fallos, pero ofrece funcionalidad de tabla de reparación.No hay restricciones de clave externa.Las tablas MyISAM generalmente tienen un tamaño más compacto en el disco en comparación con las tablas InnoDB.Las tablas de MyISAM podrían reducirse aún más en tamaño al comprimirlas con myisampack si fuera necesario, pero convertirse en de solo lectura.MyISAM almacena los índices en un archivo y los datos en otro.MyISAM usa búferes clave para almacenar índices en caché y deja la administración del almacenamiento en caché de datos al sistema operativo.

En general, recomendaría InnoDB para la mayoría de los propósitos y MyISAM solo para usos especializados.InnoDB es ahora el motor predeterminado en las nuevas versiones de MySQL.

+2

Leí tu respuesta y la comparé con las otras que ya están aquí.La suya es la única que menciona BLOBs.Por lo general, se dan por sentado.La suya también es la única que menciona a myisampack, uno de los héroes desconocidos de las tablas de MyISAM de lectura rápida.¡¡¡El tuyo es un +1 hoy !!! 23 ago. 112011-08-23 03:45:37


3

MYISAM

MYISAM proporciona bloqueo a nivel de tabla, búsqueda FULLTEXT.MYISAM tiene el manejo de columnas AUTO_INCREMENTED más flexible fuera de todos los motores de almacenamiento.MYISAM no admite transacciones.

INNODB

INNODB es un motor de almacenamiento seguro para transacciones. INNODB tiene capacidades de confirmación, retrotracción y recuperación de fallos. INNODB admite la integridad referencial de clave externa.


4

Incluye MySQL 5.6 cambios.

MOTOR DE ALMACENAMIENTO INNODB:

  • Proporciona un cumplimiento total de ACID (atomicidad, consistencia, aislamiento, durabilidad).Las versiones múltiples se utilizan para aislar transacciones de unas a otras.
  • InnoDB proporciona una recuperación automática después de una caída del servidor MySQL o del host en el que se ejecuta el servidor.
  • InnoDB admite claves externas e integridad referencial, incluidas las eliminaciones y actualizaciones en cascada.
  • MySQL 5.6 se basa en la plataforma de InnoDB totalmente integrada como el motor de almacenamiento predeterminado
  • Estadísticas del optimizador persistentes : proporciona una precisión mejorada de las estadísticas del índice InnoDB y la coherencia en los reinicios de MySQL.
  • Poda de la memoria caché de tabla InnoDB: para facilitar la carga de memoria en sistemas con gran cantidad de tablas, InnoDB ahora libera la memoria asociada con una tabla abierta.Un algoritmo LRU selecciona tablas que han pasado más tiempo sin ser accedidas.
  • Admite la búsqueda de texto completo: un tipo especial de índice, el índice FULLTEXT, ayuda a InnoDB a lidiar con consultas y operaciones DML que involucran columnas basadas en texto y las palabras que contienen.Estos índices se representan físicamente como tablas completas de InnoDB.
  • InnoDB parece ser mucho más rápido en la búsqueda de texto completo que en MyISAM

Por lo tanto, no tiene sentido usar el motor MyISAM si ya está actualizado a 5.6, de lo contrario, no espere a que se actualice a MySQL 5.6.

InnoDB VS MyISAM performance using MySQL 5.6


17

Un poco tarde para el juego ... pero aquí hay un post I wrote a few months back bastante completo, que detalla las principales diferencias entre MYISAM e InnoDB.Toma una taza de té (y quizás una galleta) y disfruta.


La principal diferencia entre MyISAM e InnoDB es la integridad referencial y las transacciones.También hay otras diferencias, como bloqueo, retrotracción y búsquedas de texto completo.

Integridad referencial

La integridad referencial asegura que las relaciones entre las tablas permanezcan 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 apuntada a, 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 se elimina un producto de la tabla de 'Productos', también se eliminarán todos los listados que apuntan 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 de una tabla se administran mediante declaraciones del lenguaje de manipulación de datos (DML), como SELECT, INSERT, UPDATE y DELETE.Una transacción agrupa dos o más declaraciones DML en una sola unidad de trabajo, por lo que se aplica la unidad completa o ninguna de ellas.

MyISAM no admite transacciones, mientras que InnoDB sí lo hace.

Si se interrumpe una operación mientras se usa una tabla MyISAM, la operación se cancela de inmediato, y las filas (o incluso los datos dentro de cada fila) afectados se verán afectadas, incluso si la operación no se completó.

Si se interrumpe una operación mientras se usa una tabla InnoDB, ya que utiliza transacciones, que tienen atomicidad, cualquier transacción que no se completó no entrará en vigencia, ya que no se realiza ninguna confirmación.

Bloqueo de tabla vs bloqueo de fila

Cuando una consulta se ejecuta en una tabla MyISAM, la tabla completa en la que se consulta se bloqueará.Esto significa que las consultas subsiguientes solo se ejecutarán después de que se complete la actual.Si está leyendo una tabla grande, y/o hay operaciones frecuentes de lectura y escritura, esto puede significar una enorme acumulación de consultas.

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

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

Transacciones y Rollbacks

Cuando ejecuta una operación en MyISAM, se establecen los cambios;en InnoDB, esos cambios se pueden revertir.Los comandos más comunes que se utilizan para controlar las transacciones son COMMIT, ROLLBACK y SAVEPOINT.1. COMPROMISO: puede escribir múltiples operaciones DML, pero los cambios solo se guardarán cuando se realice un COMPROMISO 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

Confiabilidad

MyISAM no ofrece integridad de datos: los fallos de hardware, las paradas impuras y las operaciones canceladas pueden provocar que los datos se dañen.Esto requeriría una reparación completa o reconstrucción de los índices y tablas.

InnoDB, por otro lado, utiliza un registro transaccional, un búfer de doble escritura y una suma de comprobación y validación automáticas para evitar la corrupción.Antes de que InnoDB realice cambios, registra los datos antes de las transacciones en un archivo de espacio de tabla del sistema llamado ibdata1.Si se produce un bloqueo, InnoDB se recuperaría automáticamente a través de la reproducción de esos registros.

FULLTEXT Indexación

InnoDB no admite la indexación FULLTEXT hasta la versión 5.6.4 de MySQL.En el momento de escribir este post, la versión de 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 debe ser el motor de almacenamiento predeterminado de su elección.Elija MyISAM u otros tipos de datos cuando satisfagan una necesidad específica.


1

MyISAM

MyISAM es un motor de almacenamiento para MySQL.Antes de MySQL 5.5 era el motor de almacenamiento predeterminado para MySQL.Se basa en el antiguo motor de almacenamiento ISAM. MyySAM está optimizado para entornos con operaciones de lectura intensas y pocas escrituras, o ninguna en absoluto.La razón por la que MyISAM permite lecturas rápidas es la estructura de sus índices: cada entrada apunta a un registro en el archivo de datos y el puntero se desplaza desde el principio del archivo.De esta manera, los registros se pueden leer rápidamente, especialmente cuando el formato está FIJO.Así, las filas son de longitud constante.Un área típica en la que uno podría preferir MyISAM es el almacén de datos, ya que involucra consultas en tablas muy grandes, y la actualización de dichas tablas se realiza cuando la base de datos no está en uso (generalmente de noche).Las inserciones también son fáciles, porque las nuevas filas se agregan al final del archivo de datos.Sin embargo, las operaciones de eliminación y actualización son más problemáticas: las eliminaciones deben dejar un espacio vacío, o las compensaciones de las filas cambiarían;lo mismo ocurre con las actualizaciones, ya que la longitud de las filas se acorta;Si la actualización hace que la fila sea más larga, la fila se fragmenta.Para desfragmentar filas y reclamar espacio vacío, elOPTIMIZE TABLEcomando debe ser ejecutado.Debido a este mecanismo simple, generalmente las estadísticas de índice de MyISAM son bastante precisas.Otros inconvenientes importantes de MyISAM son la ausencia de soporte de transacciones y claves externas.

InnoDB

InnoDB es un motor de almacenamiento para MySQL.MySQL 5.5 y posteriores lo usan por defecto.Proporciona las características estándar de transacción compatibles con ACID, junto con el soporte de clave externa (integridad referencial declarativa).Implementa transacciones SQL y XA, espacios de tabla,FULLTEXTÍndices y operaciones espaciales siguiendo el estándar de OpenGIS. Se incluye como estándar en la mayoría de los binarios distribuidos por MySQL AB, con la excepción de algunas versiones OEM.El software tiene doble licencia de Oracle Corporation;se distribuye bajo la Licencia Pública General de GNU, pero también puede otorgarse a las partes que deseen combinar InnoDB en software propietario.

tenedores

MariaDB tiene un motor de almacenamiento llamado Aria, que se describe como una "alternativa a MyISAM" a prueba de choques.MariaDB y Percona Server usan una bifurcación de InnoDB llamada XtraDB de forma predeterminada.XtraDB es mantenido por Percona.Los cambios de Oracle InnoDB se importan regularmente a XtraDB, y se agregan algunas correcciones de errores y características adicionales.