Motor de almacenamiento de la serie mysql

Este artículo presenta principalmente el motor de almacenamiento de mysql y explica las características y diferencias de los principales motores de almacenamiento.

Uno, introducción al motor de almacenamiento

Inserte la descripción de la imagen aquí

El motor de almacenamiento de la base de datos es el componente de software subyacente de la base de datos. El sistema de gestión de la base de datos utiliza el motor de datos para crear, consultar, actualizar y eliminar datos. Los diferentes motores de almacenamiento proporcionan diferentes mecanismos de almacenamiento, técnicas de indexación, niveles de bloqueo y otras funciones, y también se pueden obtener funciones específicas utilizando diferentes motores de almacenamiento.

El núcleo de MySQL es el motor de almacenamiento, y las características compatibles con los diferentes motores de almacenamiento son diferentes.

El motor de almacenamiento en MySQL es un motor de almacenamiento enchufable.

Después de MySQL 5.5.5, InnoDB es el motor de almacenamiento predeterminado.

El nivel de control del motor de almacenamiento en MySQL es el nivel de la tabla. Podemos especificar el motor de almacenamiento utilizado por la tabla al crear la tabla.

2. Tipos de motores de almacenamiento compatibles con MySQL

Los motores de almacenamiento compatibles con MySQL 5.7 incluyen InnoDB, MyISAM, Memory, Merge, Archive, Federated, CSV, BLACKHOLE, etc.

Puede utilizar la instrucción SHOW ENGINES para ver los tipos de motor admitidos por el sistema, y ​​el resultado se muestra en la figura.
Inserte la descripción de la imagen aquí
El valor de la columna Soporte indica si se puede usar un motor determinado, YES indica que se puede usar, NO indica que no se puede usar y DEFAULT indica que el motor es el motor de almacenamiento predeterminado actual.

El sitio web oficial describe las características de cada motor de almacenamiento:

Característica MyISAM Memoria InnoDB Archivo NDB
Soporte de transacciones No No si No si
Bloquear granularidad Mesa Mesa Fila Fila Fila
Límite de almacenamiento 256 TB RAM 64 TB Ninguna 384EB
MVCC (control de versiones múltiples) No No si No No
Soporte de clave externa No No si No Si (nota 5)
Índice agrupado No No si No No
Índices de árbol B si si si No No
Soporte de búsqueda de texto completo si No Si (nota 6) No No
Soporte de tipo de datos geoespaciales si No si si si
Soporte de índice geoespacial si No Si (nota 7) No No
Índices hash No si No (nota 8) No si
Índice de árbol T No No No No si
Caché de índice si N / A si No si
Soporte de clúster No No No No si
Datos comprimidos si No si si No
Caché de datos No N / A si No si
cifrado de datos Si (nota 3) Si (nota 3) Si (nota 4) Si (nota 3) Si (nota 3)
Copia de seguridad y recuperación puntual si si si si si
Soporte de replicación (soporte maestro-esclavo) si Limitado (nota 9) si si si
Actualizar estadísticas para el diccionario de datos si si si si si

Nota:
Según la importancia de las características y la diferencia, el orden se ha ajustado en cierta medida.

3. Introducción a los tipos de motores clave

1. Motor de almacenamiento InnoDB

Desde MySQL5.5, el motor de almacenamiento integrado predeterminado de MySQL ha sido InnoDB. Sus características principales son:
(1) La recuperación ante desastres es mejor;
(2) Admite transacciones. El nivel de aislamiento de transacciones predeterminado es la repetibilidad, que se logra mediante MVCC (Control de versiones concurrentes).
(3) La granularidad de bloqueo utilizada es el bloqueo de nivel de fila, que puede admitir una mayor simultaneidad;
(4) Admite claves externas;
(5) Con algunas herramientas de copia de seguridad activa, puede admitir copia de seguridad activa en línea;
(6) Hay gestión de búfer en InnoDB , A través del grupo de búfer, todos los índices y datos se almacenan en caché para acelerar la velocidad de consulta;
(7) Admite índice agrupado. Para las tablas de tipo InnoDB, la organización física de los datos es una tabla agrupada. Todos los datos están organizados según la clave principal. Los datos y el índice se juntan, y todos se ubican en los nodos hoja del número B +, y la consulta a través del índice agrupado puede reducir las consultas de regreso a la tabla.
(8) InnoDB no guarda el número específico de filas en la tabla, y se requiere un escaneo completo de la tabla al ejecutar el recuento de selección (*) de la tabla.
(9) Admite el índice de árbol B y la búsqueda de texto completo (el motor de almacenamiento InnoDB comienza a admitir la búsqueda de texto completo después de MySQL 5.6)
(10) ) No se admite el índice hash, pero el índice hash adaptable está integrado.

2. Motor de almacenamiento MyISAM

Antes de la versión 5.5, MyISAM era el motor de almacenamiento predeterminado para MySQL. El motor de almacenamiento tiene poca concurrencia y no admite transacciones, por lo que hay menos escenarios de uso. Las características principales son:

(1) No admite transacciones;
(2) No admite claves externas. Si agrega claves externas a la fuerza, no se solicitará ningún error, pero las claves externas no funcionan;
(3) No se admiten índices de clúster y el almacenamiento en caché de consultas de datos solo se almacenará en caché El índice no almacena datos en caché como InnoDB, y utiliza el propio caché del sistema operativo;
(4) La granularidad de bloqueo predeterminada es el bloqueo de nivel de tabla, por lo que la concurrencia es muy pobre, el bloqueo es rápido y el conflicto de bloqueo es menor, por lo que no es fácil Se produce un punto muerto;
(5) Admite la indexación de texto completo (después de MySQL5.6, el motor de almacenamiento InnoDB también admite la indexación de texto completo), pero la indexación de texto completo de MySQL básicamente no se utiliza. Para la indexación de texto completo, existen otras soluciones maduras. Por ejemplo: ElasticSearch, Solr, Sphinx, etc.
(6) Si el host donde se encuentra la base de datos deja de funcionar, los archivos de datos MyISAM se dañan fácilmente y son difíciles de recuperar;

Punto clave: Comparación de InnoDB y MyISAM

1. Soporte de transacciones: InnoDB admite transacciones, MyISAM no admite transacciones.
2. Granularidad de bloqueo: InnoDB es un bloqueo de nivel de fila, MyISAM es un bloqueo de nivel de tabla.
Por lo tanto, MyISAM es más propenso al interbloqueo que InnoDB, la probabilidad de conflictos de bloqueo es mayor y el costo del bloqueo también es mayor. Debido a que cada fila debe bloquearse, InnoDB admite una mayor concurrencia que MyISAM;
3. Soporte de clave externa: InnoDB admite claves externas, MyISAM no admite claves externas.
4. Soporte de índices agrupados: InnoDB admite índices agrupados, MyISAM no admite agrupaciones.
5. Seguridad y respaldo de datos: en términos de respaldo y recuperación ante desastres, InnoDB admite respaldo en línea en caliente y tiene una solución de respaldo en línea muy madura;
6. Rendimiento de consulta: la eficiencia de consulta de MyISAM es mayor que InnoDB, porque InnoDB está en el proceso de consulta. La caché de datos debe mantenerse, y el proceso de consulta es ubicar el bloque de datos donde se encuentra la fila, y luego ubicar la fila que se va a encontrar del bloque de datos; y MyISAM puede ubicar directamente la dirección de memoria donde se encuentran los datos, y los datos se pueden encontrar directamente;
7. Estadísticas del número total de registros en la tabla: instrucción SELECT COUNT (*), si el número de filas es superior a decenas de millones, MyISAM puede averiguarlo rápidamente, pero las consultas de InnoDB son particularmente lentas, porque MyISAM almacena el número de filas por separado e InnoDB necesita Zhu para funcionar Cuente el número de filas; por lo tanto, si usa InnoDB y necesita consultar el número de filas, debe realizar un procesamiento especial en el número de filas, como consultas fuera de línea y caché;
8. Archivos de almacenamiento: Los archivos de estructura de tabla MyISAM incluyen: .frm (definición de estructura de tabla) , .MYI (índice), .MYD (datos) y los archivos de datos de tabla de InnoDB son: .ibd y .frm (definición de estructura de tabla);

3. Motor de almacenamiento de MEMORIA

Almacenar datos en la memoria, similar a Redis y memcached en el mercado. Para mejorar la velocidad de acceso a los datos, las principales características son:

(1) Los tipos de datos admitidos son limitados, por ejemplo: los tipos TEXT y BLOB no son compatibles. Para los datos de tipo cadena, solo se admiten filas de longitud fija y VARCHAR se almacenará automáticamente como tipo CHAR;
(2) La granularidad de bloqueo admitida es Cerraduras a nivel de mesa. Por lo tanto, cuando la cantidad de acceso es relativamente grande, el bloqueo a nivel de tabla se convertirá en el cuello de botella del motor de almacenamiento de MEMORIA;
(3) Dado que los datos se almacenan en la memoria, todos los datos se perderán después de que se reinicie el servidor;
(4) Al consultar, si Use una tabla temporal, y hay campos de tipo BLOB, TEXT en la tabla temporal, luego la tabla temporal se convertirá en una tabla de tipo MyISAM, el rendimiento se reducirá drásticamente;

Cuarto, cómo elegir el motor de almacenamiento adecuado

1. ¿El escenario de uso requiere soporte de transacciones;
2. ¿Necesita admitir alta concurrencia? InnoDB tiene una concurrencia mucho más alta que MyISAM;
3. Necesita admitir claves externas;
4. Necesita admitir respaldo activo en línea;
5. Almacenamiento en búfer de datos eficiente, InnoDB Tanto los datos como los índices se almacenan en búfer, mientras que MyISAM solo almacena los índices en búfer;
6. Los índices no son iguales para diferentes motores de almacenamiento;
7. ¿Necesita admitir la agrupación en clústeres?

En general, los escenarios de uso de MySQL convencionales actuales utilizan el motor de almacenamiento InnoDB, por lo que MySQL adoptó oficialmente InnoDB como el motor de almacenamiento predeterminado después de MySQL 5.5.5.

Cinco, configuración del motor de almacenamiento

1. Especifique el motor de almacenamiento al construir la mesa

CREATE TABLE t1 (i INT) ENGINE = INNODB;

2. Establecer el motor de almacenamiento predeterminado

InnoDB es el motor de almacenamiento predeterminado después de MySQL 5.5.5. Si necesita modificar el motor de almacenamiento predeterminado, puede modificar el valor de default-storage-engine en el archivo de configuración my.cnf.

default_storage_engine=NDBCLUSTER;

3. Modificar el motor de almacenamiento de la mesa.

ALTER TABLE t ENGINE = InnoDB;

para resumir

Este artículo presenta principalmente el motor de almacenamiento mysql y las características de cada motor de almacenamiento.
Según las características de cada motor de almacenamiento, indique los escenarios de uso aplicables.
El núcleo es: la diferencia entre InnoDB y MyISAM, preguntas de alta frecuencia en entrevistas.
Tenga en cuenta que la granularidad del control del motor de almacenamiento MySQL se encuentra en el nivel de la tabla , es decir, se pueden configurar diferentes tablas en la misma base de datos con diferentes motores de almacenamiento.

Más emocionante, sígueme.
Leyenda: sigue al anciano para aprender java

Supongo que te gusta

Origin blog.csdn.net/w1014074794/article/details/108570082
Recomendado
Clasificación