Los motores de almacenamiento son componentes de MySQL que manejan las operaciones SQL para diferentes tipos de tablas. InnoDB
es el motor de almacenamiento por defecto y de uso más general, y Oracle recomienda utilizarlo para las tablas excepto para casos de uso especializados. (La sentencia CREATE TABLE
en MySQL 8.0 crea tablas InnoDB
de forma predeterminada).
MySQL Server utiliza una arquitectura de motor de almacenamiento conectable que permite cargar y descargar motores de almacenamiento de un servidor MySQL en ejecución.
Para determinar qué motores de almacenamiento soporta su servidor, utilice la sentencia SHOW ENGINES
. El valor de la columna Support
indica si se puede utilizar un motor. Un valor de YES
, NO
o DEFAULT
indica que un motor está disponible, no está disponible o está disponible y actualmente está configurado como motor de almacenamiento predeterminado.
mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance SchemaTransactions: NO XA: NO Savepoints: NO*************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tablesTransactions: NO XA: NO Savepoints: NO*************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)Transactions: NO XA: NO Savepoints: NO*************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engineTransactions: NO XA: NO Savepoints: NO...
Este capítulo cubre casos de uso para motores de almacenamiento MySQL de propósito especial. No cubre el motor de almacenamiento por defecto InnoDB
ni el motor de almacenamiento NDB
que se tratan en el Capítulo 15, El motor de almacenamiento InnoDB y en el Capítulo 23, MySQL NDB Cluster 8.0. Para los usuarios avanzados, también contiene una descripción de la arquitectura del motor de almacenamiento enchufable (véase la Sección 16.11, «Visión general de la arquitectura del motor de almacenamiento MySQL»).
Para obtener información sobre las características ofrecidas en los binarios comerciales de MySQL Server, consulte Ediciones de MySQL, en el sitio web de MySQL. Los motores de almacenamiento disponibles podrían depender de la edición de MySQL que esté utilizando.
Para obtener respuestas a las preguntas más frecuentes sobre los motores de almacenamiento de MySQL, consulte la sección A.2, «Preguntas frecuentes sobre MySQL 8.0: Motores de almacenamiento».
Motores de almacenamiento soportados por MySQL 8.0
-
InnoDB
: El motor de almacenamiento por defecto en MySQL 8.0.InnoDB
es un motor de almacenamiento a prueba de transacciones (compatible con ACID) para MySQL que tiene capacidades de commit, rollback y crash-recovery para proteger los datos del usuario.InnoDB
El bloqueo a nivel de fila (sin escalar a bloqueos de granularidad más gruesa) y las lecturas consistentes sin bloqueo al estilo de Oracle aumentan la concurrencia multiusuario y el rendimiento.InnoDB
almacena los datos del usuario en índices agrupados para reducir la E/S en las consultas comunes basadas en claves primarias. Para mantener la integridad de los datos,InnoDB
también admite las restricciones de integridad referencialFOREIGN KEY
. Para obtener más información sobreInnoDB
, consulte el capítulo 15, El motor de almacenamiento InnoDB. -
MyISAM
: Estas tablas ocupan poco espacio. El bloqueo a nivel de tabla limita el rendimiento en las cargas de trabajo de lectura/escritura, por lo que se suele utilizar en cargas de trabajo de sólo lectura o de lectura en configuraciones web y de almacenamiento de datos. -
Memory
: Almacena todos los datos en la memoria RAM, para un acceso rápido en entornos que requieren búsquedas rápidas de datos no críticos. Este motor se conocía anteriormente como motorHEAP
. Sus casos de uso están disminuyendo;InnoDB
con su área de memoria de reserva de búferes proporciona una forma duradera y de propósito general para mantener la mayoría o todos los datos en la memoria, yNDBCLUSTER
proporciona búsquedas rápidas de valores clave para enormes conjuntos de datos distribuidos. -
CSV
: Sus tablas son realmente archivos de texto con valores separados por comas. Las tablas CSV le permiten importar o volcar datos en formato CSV, para intercambiar datos con scripts y aplicaciones que leen y escriben ese mismo formato. Dado que las tablas CSV no están indexadas, normalmente se mantienen los datos en tablasInnoDB
durante el funcionamiento normal, y sólo se utilizan las tablas CSV durante la fase de importación o exportación. -
Archive
: Estas tablas compactas y no indexadas están pensadas para almacenar y recuperar grandes cantidades de información histórica, archivada o de auditoría de seguridad que se consulta con poca frecuencia. -
Blackhole
: El motor de almacenamiento de Blackhole acepta pero no almacena datos, de forma similar al dispositivo Unix/dev/null
. Las consultas siempre devuelven un conjunto vacío. Estas tablas pueden utilizarse en configuraciones de replicación en las que las sentencias DML se envían a los servidores de réplica, pero el servidor de origen no mantiene su propia copia de los datos. -
NDB
(también conocido comoNDBCLUSTER
): Este motor de base de datos en clúster es especialmente adecuado para aplicaciones que requieren el mayor grado posible de tiempo de actividad y disponibilidad. -
Merge
: Permite a un DBA o desarrollador de MySQL agrupar lógicamente una serie de tablas idénticasMyISAM
y referenciarlas como un solo objeto. Bueno para entornos VLDB como el almacenamiento de datos. -
Federated
: Ofrece la posibilidad de enlazar servidores MySQL separados para crear una base de datos lógica a partir de muchos servidores físicos. Muy bueno para entornos distribuidos o de data mart. -
Example
: Este motor sirve como ejemplo en el código fuente de MySQL que ilustra cómo empezar a escribir nuevos motores de almacenamiento. Es principalmente de interés para los desarrolladores. El motor de almacenamiento es un «stub» que no hace nada. Puede crear tablas con este motor, pero no se pueden almacenar datos en ellas ni recuperarlos.
No está restringido a usar el mismo motor de almacenamiento para todo un servidor o esquema. Puede especificar el motor de almacenamiento para cualquier tabla. Por ejemplo, una aplicación podría utilizar principalmente tablas InnoDB
, con una tabla CSV
para exportar datos a una hoja de cálculo y algunas tablas MEMORY
para espacios de trabajo temporales.
Elección de un motor de almacenamiento
Los diversos motores de almacenamiento proporcionados con MySQL están diseñados con diferentes casos de uso en mente. La siguiente tabla proporciona un resumen de algunos motores de almacenamiento proporcionados con MySQL, con notas aclaratorias a continuación de la tabla.
Tabla 16.1 Resumen de las características de los motores de almacenamiento
Función | MyISAM | Memoria | InnoDB | Archivo | NDB |
---|---|---|---|---|---|
B-índices de árbol | Sí | Sí | Sí | No | No |
Copia de seguridad/punto entiempo (nota 1) | Sí | Sí | Sí | Sí | Sí |
Soporte de base de datos en clúster | No | No | No | No | Sí |
Índices agrupados | No | No | Sí | No | No |
Datos comprimidos | Sí (nota 2) | No | Sí | Sí | No |
Cachés de datos | No | N/A | Sí | No | Sí |
Datos cifrados | Sí (nota 3) | Sí (nota 3) | Sí (nota 4) | Sí (nota 3) | Sí (nota 3) |
Soporte de claves extranjeras | No | No | Sí | No | Sí (nota 5) |
Sin…índices de búsqueda de texto | Sí | No | Sí (nota 6) | No | No |
Soporte geoespacial soporte de tipos de datos | Sí | No | Sí | Sí | Sí |
Indización geoespacial soporte | Sí | No | Sí (nota 7) | No | No |
Índices hash | No | Sí | No (nota 8) | No | Sí |
Cachés de índices | Sí | N/A | Sí | No | Sí |
Granularidad de bloqueo | Tabla | Tabla | Fila | Fila | Fila |
MVCC | No | No | Sí | No | No |
Soporte de replicación (nota 1) | Sí | Limitado (nota 9) | Sí | Sí | Sí |
Límites de almacenamiento | 256TB | RAM | 64TB | Nada | 384EB |
T-índices del árbol | No | No | No | No | Sí |
Transacciones | No | No | Sí | No | Sí |
Actualizar las estadísticas del diccionario de datos | Sí | Sí | Sí | Sí | Sí |
Notas:
1. Implementado en el servidor, en lugar de en el motor de almacenamiento.
2. Las tablas MyISAM comprimidas sólo se admiten cuando se utiliza el formato de filas comprimido. Las tablas que utilizan el formato de filas comprimido con MyISAM son de sólo lectura.
3. Implementado en el servidor a través de funciones de cifrado.
4. Implementado en el servidor a través de funciones de cifrado; En MySQL 5.7 y posteriores, se admite el cifrado de datos en reposo.
5. El soporte para claves foráneas está disponible en MySQL Cluster NDB 7.3 y posteriores.
6. El soporte para índices FULLTEXT está disponible en MySQL 5.6 y posteriores.
7. El soporte para indexación geoespacial está disponible en MySQL 5.7 y posteriores.
8. InnoDB utiliza índices hash internamente para su característica de Índice Hash Adaptable.
9. Véase la discusión más adelante en esta sección.