Entrevista de MySQL esencial + Explicación + optimización simple + MyISAM, diferencia del motor de almacenamiento InnoDB + por qué MySQL elige B + índice de árbol + bloqueo en MySQL

Motor de almacenamiento MySQL

Diferencia (MyISAM, InnoDB)

1, innodb admite transacciones, myisam no admite transacciones
2, innodb admite claves externas y myisam no admite. Al convertir un innodb que admite externo a myisam, fallará
3. InnoDB no guarda el número específico de filas en la tabla. Cuando ejecuta select count (*) de la tabla, escaneará la tabla completa, y myisam usa una variable para guardar el número de filas en toda la tabla Para ejecutar la declaración anterior, solo lea el valor de la variable, la velocidad es muy rápida
4, innodb no admite la búsqueda de texto completo y myisam admite la búsqueda de texto completo, la eficiencia de la consulta es mayor que innodb
5, innodb admite el bloqueo de nivel de fila, la granularidad del bloqueo de myisam es a nivel de tabla
6, myisam dijo que guardar en forma de archivos, en la transferencia de datos multiplataforma, el uso de almacenamiento myisam ahorrará muchos problemas.

==========
Myisam no admite el
soporte innodb de clave externa primaria

Myisam gestiona tablas no transaccionales, proporciona almacenamiento y recuperación de alta velocidad, y la búsqueda de texto completo
innodb admite transacciones, con muchas características, incluido ACID

A: atomicidad

C: consistencia

I: aislamiento

D: permanente


¿Cuál es el papel del índice de la base de datos? ¿Cuáles son las desventajas?

Crear un índice puede mejorar en gran medida el rendimiento del sistema.
1. Al crear un índice único, puede garantizar la unicidad de cada fila de datos en la tabla de la base de datos.
2. Puede acelerar enormemente la velocidad de recuperación de datos, que también es la razón principal para crear índices.
3. Puede acelerar la conexión entre tablas y tablas, especialmente en términos de lograr la integridad de referencia de los datos.
4. Al utilizar la agrupación y clasificación, palabras y oraciones para la recuperación de datos, también puede reducir significativamente el tiempo de agrupación y clasificación en la consulta.

5. Al usar el índice, puede usar el corrector de optimización durante la consulta para mejorar el rendimiento del sistema.

Desventajas:
a. Se necesita tiempo para crear y mantener índices. Este tiempo aumenta con el aumento de datos y volumen.
b) El índice ocupa espacio físico.
c. Cuando se agregan, eliminan o modifican los datos de la tabla, el índice también debe mantenerse dinámicamente, lo que reduce la velocidad del mantenimiento de datos.


¿Por qué elegir el árbol B + para la estructura de datos en MySQL?

La complejidad del tiempo de búsqueda de Hash es O (1), y la búsqueda es realmente rápida. No importa qué número encuentre, puede encontrarlo de una vez, pero hay un problema. Por lo general, encontramos datos de acuerdo con la condición, dónde. . . . Mayor que. . . Menos de . . . . entre y. . . . También hay clasificación. . . En este momento, la complejidad del tiempo se convierte en O (n), que es más estable que el árbol binario hash. En cualquier momento la complejidad es log (n), por lo que MySQL no usa hash.

==============

¿Por qué no usar un árbol binario?
La definición de un árbol binario es "pequeña izquierda y gran derecha", pero habrá casos extremos, como el primer número es 1, y luego 2,3,4,5,6 ... formarán una cadena, esta situación Es "hacia la derecha"

================ El
árbol binario balanceado rotará y el nodo raíz cambiará a medida que cambien los datos. En teoría, el número de comparaciones y el número de búsquedas son ideales en este momento, pero existe el problema de que a medida que aumenta la cantidad de datos, la altura del árbol también se hace más grande y la velocidad de la búsqueda se relaciona positivamente con la altura del árbol. Y el número de E / S del disco también está relacionado positivamente con la altura del árbol.

==================
Solo dos nodos pueden colgarse en un nodo del árbol binario, y un máximo de 3 nodos pueden colgarse en un nodo del árbol B. La ventaja de esto es que el árbol puede reducirse. Altura, porque hay un nodo en el medio. Los nodos de árbol B no solo almacenan punteros de datos sino también datos de datos, sino que el espacio de almacenamiento de cada página es limitado, por lo que en comparación con los árboles B + (los nodos no hoja de árboles B + solo almacenan punteros de datos, los datos existen en hojas Nodo) la altura aumentará, aumentará el disco io.

====================== El
árbol B + tiene dos estructuras de datos, el nodo de la hoja inferior es una lista vinculada, el nodo de la lista no vinculada es una estructura de árbol, el árbol B + tendrá todos los datos Todos se colocan en los nodos hoja, y todos los nodos ya no necesitan atravesarse en orden (izquierda-centro-derecha), y hay un puntero entre los nodos. Esto acelera la búsqueda de rango.


bloquear en mysql

En informática, los bloqueos son un mecanismo de sincronización que se usa para forzar restricciones en el acceso a los recursos cuando se ejecuta el subprocesamiento múltiple, es decir, se usa para garantizar la satisfacción de los requisitos de desmontaje mutuo en el control de concurrencia.

Bloqueo a nivel de fila

Es el mejor bloqueo granular en MySQL, lo que significa que solo se bloquea la fila de operación actual. El bloqueo a nivel de fila reduce en gran medida el conflicto de las operaciones de la base de datos. La granularidad de bloqueo es la más pequeña, pero la sobrecarga de bloqueo también es la más grande.

Características: gran sobrecarga, bloqueo lento, punto muerto, granularidad mínima, conflicto más bajo posible y mayor concurrencia

Menos conflictos y bloqueo lento
(es el mejor bloqueo granular en MySQL, lo que significa que solo se bloquea la fila de la operación actual. El bloqueo a nivel de fila reduce en gran medida el conflicto de las operaciones de la base de datos. Su granularidad de bloqueo es la más pequeña, pero La sobrecarga de bloqueo también es la más grande., Características: sobrecarga grande, bloqueo lento, habrá puntos muertos, la granularidad es la más pequeña, se puede pensar que el conflicto es el más bajo y la concurrencia también es la más alta)

Bloqueo a nivel de mesa

Es el bloqueo más granular en MySQL, lo que significa bloquear toda la tabla de la operación actual. Es simple de implementar y consume menos recursos, y es compatible con la mayoría de los motores MySQL.

Características: pequeña sobrecarga, bloqueo rápido, sin punto muerto, granularidad de alta velocidad, alta probabilidad de conflicto y menor concurrencia

Velocidad rápida y muchos conflictos
(el bloqueo más granular en MySQL, lo que significa que toda la tabla de la operación actual está bloqueada. Es simple de implementar y consume pocos recursos. Es compatible con la mayoría de los motores MySQL. Características: pequeña sobrecarga, Bloqueo rápido, sin punto muerto, granularidad de alta velocidad, alta probabilidad de conflicto y menor concurrencia)

Bloqueo a nivel de página

Es un bloqueo entre el bloqueo de nivel de fila y el bloqueo de nivel de tabla en MySQL, es un tipo de bloqueo que comprometen, bloquea un grupo de registros adyacentes a la vez

Características: el desbloqueo y el bloqueo son entre bloqueos de tabla y bloqueos de fila, se producirán puntos muertos, la granularidad también se encuentra entre bloqueos de fila y bloqueos de tabla, y el grado de concurrencia es general

Entre el bloqueo de fila y el bloqueo de tabla
(es el bloqueo entre el bloqueo de nivel de fila y el bloqueo de nivel de tabla en MySQL, es un tipo de bloqueo que comprometen, bloquea un grupo de registros adyacentes a la vez, características: desbloqueo y bloqueo Entre bloqueos de tabla y bloqueos de fila, habrá puntos muertos, la granularidad también está entre bloqueos de fila y bloqueos de tabla, el grado de concurrencia


Optimización de bases de datos.

¿Qué es la optimización?

Organice los recursos de manera razonable, ajuste los parámetros del sistema para que MySQL se ejecute más rápido y ahorre recursos

La optimización es multifacética, incluyendo consultas, actualizaciones, servidores, etc.

Principio de optimización: reduzca los cuellos de botella de recursos, reduzca la ocupación de recursos y aumente la velocidad de respuesta del sistema


Explicar ver el plan de ejecución (agregar explicar delante de la instrucción de consulta)

Explicación de campo

select_type: indica el tipo de instrucción select

  1. Consulta
    simple simple, que no incluye consulta de unión y subconsulta

  2. consulta primaria o la declaración de consulta más externa

  3. La segunda o posterior declaración de consulta de la consulta de conexión de unión

  4. La segunda o posterior instrucción select en union dependiente union depende de la consulta fuera
  5. resultado de la unión
    consulta de unión resultados

  6. La primera instrucción select de sub_query subquery
  7. dependiente_subquery
    subconsulta primera instrucción de selección, depende de la consulta fuera

  8. selección derivada (de la subconsulta de consulta)

tipo: indica el tipo de conexión de la tabla

  1. Solo hay una línea para el sistema, que es un tipo especial de tipo constante, que no aparece en momentos normales, esto puede ignorarse

  2. La tabla de datos const tiene solo una fila coincidente, que a menudo se usa para consultas de clave principal o índice único. También se puede entender que const es óptimo

  3. eq_ref se puede usar para comparar consultas con un índice usando =, se usa en todas las partes de un índice que están conectadas y el índice es la clave principal o única

  4. La condición de consulta de referencia no es una clave primaria ni un caso único. Se puede usar para operaciones = o <o>

  5. ref_or_null Este tipo es como ref, pero MySQL se ha agregado para buscar específicamente filas que contienen valores nulos. La optimización de este tipo de conexión a menudo se usa para resolver subconsultas

  6. index_merge Este tipo de conexión indica que se utiliza el método de optimización de fusión de índice

  7. unique_subquery es una función de búsqueda de índice que puede reemplazar completamente las subconsultas con mayor eficiencia

  8. index_subquery Este tipo de conexión es similar a unique_subquery y puede reemplazar la subconsulta

  9. rango solo recupera filas en un rango especificado, use un índice para seleccionar filas

  10. índice El tipo de conexión es el mismo que todos, generalmente más rápido que todos, porque el archivo de índice suele ser más pequeño que el archivo de datos

  11. todo realiza un escaneo completo de la tabla con el peor rendimiento

Estas 5 situaciones son todas ideales para el uso del índice
(system, const, eq_ref, ref, ref_or_null)

posibles_claves

Indique qué índice se puede usar en MySQL para encontrar una fila en la tabla. Si la columna es nula, significa que no se usa ningún índice. Puede crear un índice en esta columna para mejorar el rendimiento

  1. clave: muestra el índice (clave) que MySQL realmente decide usar. Si no se selecciona ningún índice, la clave es nula. Puede forzar el índice o ignorarlo

  2. key_len: muestra que MySQL decide usar la longitud de la clave. Si la clave es nula, la longitud es nula

  3. ref: muestra qué columna o constante usar para seleccionar filas de la tabla junto con la tecla

  4. filas: muestra el número de filas que MySQL cree que debe verificar para ejecutar la consulta

  5. extra: esta columna contiene información detallada para que MySQL resuelva la consulta


Notas sobre el uso de índices MySQL

1. En la instrucción de consulta que usa la palabra clave Like para la consulta, si el primer carácter de la cadena coincidente es%, el índice no funciona. La indexación solo funciona si% no está en la primera posición

2. El índice compuesto sigue el principio del prefijo más a la izquierda, es decir, el primer campo del índice compuesto se usa en la condición de consulta antes de usar el índice, por lo que la posición de la columna de índice en el índice compuesto es crucial.

3. Mientras la columna contenga valores nulos, no se mantendrá en el índice. Mientras haya una columna en el índice compuesto que contenga valores nulos, esta columna no es válida para el índice compuesto.

4. En la condición de consulta de la instrucción de consulta, solo la palabra clave OR y las columnas en las dos condiciones antes y después de OR son ambos índices, el índice tendrá efecto

Resumen
(1. En la instrucción de consulta que utiliza la palabra clave Like para consultar, si el primer carácter de la cadena coincidente es%, el índice no funciona. El índice solo funcionará cuando% no esté en la primera posición. 2. Compuesto El índice sigue el principio del prefijo más a la izquierda, es decir, el primer campo del índice compuesto se usa en la condición de consulta, se usará el índice, por lo que la posición de la columna de índice en el índice compuesto es crítica., 3. Siempre que la columna contenga un valor nulo El valor no se mantendrá en el índice. Mientras haya una columna en el índice compuesto que contenga valores nulos, entonces esta columna no es válida para el índice compuesto 4. En la condición de consulta de la instrucción de consulta, solo hay la palabra clave OR, y las dos antes y después de (El índice solo tendrá efecto si las columnas en cada condición son índices)


Optimización de subconsultas:

Durante las subconsultas, MySQL necesita crear tablas temporales y eliminarlas después de la consulta, por lo que la velocidad de las subconsultas se verá afectada en cierta medida, por lo que puede usar consultas de combinación para unir en lugar de subconsultas. Las consultas unidas no necesitan crear tablas temporales, que es más rápido que las subconsultas. .

Optimización de la estructura de la base de datos.

Una buena solución de diseño de base de datos a menudo tiene un efecto multiplicador en el rendimiento de la base de datos.
Debe tener en cuenta la redundancia de datos, la velocidad de consulta y actualización, si el tipo de datos de campo es razonable, etc.

  • Descomponer una tabla con muchos campos en varias tablas

Para las tablas con muchos campos, si algunos campos se usan con menos frecuencia y algunos campos se usan con más frecuencia, puede separar los campos que se usan con menos frecuencia para formar una nueva tabla. Porque cuando la cantidad de datos en una tabla es grande, se volverá muy lenta debido al uso de campos bajos.

  • Aumenta la mesa del medio

Para las tablas que requieren consultas conjuntas frecuentes, puede crear una nueva tabla intermedia.
A través de la tabla intermedia, inserte los datos que deben consultarse en la tabla intermedia y luego cambie la consulta conjunta original para consultar la consulta en la tabla intermedia

  • Agregar campos redundantes

Al diseñar la tabla, debe intentar seguir las especificaciones de la teoría del paradigma, intentar reducir los campos redundantes y hacer que el diseño de la base de datos se vea refinado y elegante. Sin embargo, es razonable suponer que los campos redundantes pueden aumentar la velocidad de la consulta.
Nota: El valor del campo redundante se modifica en una tabla y debe modificarse en otra tabla al mismo tiempo; de lo contrario, habrá inconsistencia de datos

  • Optimización de hardware del servidor
  1. Configurar memoria más grande

  2. La memoria io es mucho más rápida que el disco duro, lo que puede aumentar la capacidad del búfer del sistema. Los datos permanecen en la memoria durante más tiempo para reducir el disco io

  3. Configuración de disco, como SSD

  4. Asignar razonablemente el disco IO

  5. Distribuya el disco io a múltiples dispositivos para reducir la competencia de recursos y mejorar las capacidades de operación paralela

  6. Configurar el procesador multinúcleo

MySQL es una base de datos multiproceso, multiprocesador puede mejorar la capacidad de ejecutar múltiples hilos al mismo tiempo


Método de optimización de consultas MySQL

  • No realice cálculos en columnas, ya que esto hará que el índice falle y, por lo tanto, realice un escaneo completo de la tabla

  • ¡Intente evitar usar! = No en <> y otras operaciones negativas, puede usar o conectar condiciones

  • Siempre maneje conjuntos de resultados grandes con conjuntos de resultados pequeños

  • Establezca siempre una identificación para cada tabla

  • Use el límite 1 cuando solo hay una pieza de datos

  • Intenta no usar funciones en las declaraciones

  • Evite usar select *, qué campo debe escribirse donde sea que se use

  • (No realice cálculos en las columnas, esto hará que el índice falle, para realizar un escaneo completo de la tabla, trate de evitar usar! = No en <> y otras operaciones negativas, puede usar o conectar condiciones, y siempre use conjuntos de resultados pequeños para generar grandes conjuntos de resultados, Siempre establezca una identificación para cada tabla, use el límite 1 cuando solo haya un dato, trate de no usar funciones en las declaraciones, evite usar select *, escriba qué campo debe usarse donde sea que se use)

Optimización de parámetros MySQL

Los parámetros de configuración de MySQL están en el grupo [mysqld] en el archivo my.conf o my.ini

  1. key_buf_size: el tamaño del búfer de índice. El buffer de índice es compartido por todos los hilos. El aumento del búfer de índice puede obtener un mejor índice de procesamiento, pero este valor no es tan grande como sea posible. Su valor depende del tamaño de la memoria. Si es demasiado grande, hará que el sistema pagine con frecuencia y también reducirá el rendimiento del sistema.

  2. table_cache: indica el número de tablas abiertas al mismo tiempo. Cuanto mayor sea el valor, mayor será el número de tablas que se pueden abrir al mismo tiempo. Cuanto mayor sea el valor, mejor.

  3. sort_buf_size: indica el tamaño del búfer de clasificación, cuanto mayor sea el valor, más rápida será la velocidad de clasificación

  4. innodb_buf_pool_size: indica el caché máximo de tablas e índices de tipo innodb. Cuanto mayor sea el valor, más rápida será la velocidad de consulta, pero demasiado grande afectará el rendimiento del sistema

  5. max_ connections: indica el número máximo de conexiones a la base de datos, preste atención a que la conexión ocupará recursos de memoria, demasiadas conexiones harán que MySQL muera

  6. thread_cache_size: indica el número de hilos que se pueden reutilizar, si hay muchos hilos nuevos, puede aumentar el valor del parámetro de forma adecuada

  7. wait_timeout: indica el número de segundos que el servidor espera una acción al cerrar una conexión. El valor predeterminado es 28800.


Nivel de aislamiento de transacción

  • Leer sin comprometerse

Permitir lecturas sucias, es decir, los datos que pueden modificarse por transacciones no confirmadas en otras sesiones pueden leerse: "lecturas sucias, lecturas no repetibles y lecturas virtuales ocurrirán

  • Leer enviado

Solo se pueden leer los datos enviados. Resuelva lecturas sucias, pero las lecturas no repetibles, las lecturas falsas aún ocurren

  • Lectura repetible

Las consultas dentro de una transacción son consistentes al comienzo de la transacción, nivel predeterminado innodb. Lecturas sucias resueltas y lecturas no repetibles, pero aún pueden ocurrir lecturas virtuales

  • Serializar

Lecturas completamente serializadas. Cada lectura requiere un bloqueo compartido a nivel de tabla. Las lecturas y escrituras se bloquean entre sí, lo que garantiza la exclusión mutua entre diferentes transacciones y evita lecturas sucias, lecturas no repetibles y lecturas fantasmas.

Lectura sucia :

Se refiere a que una transacción está accediendo a los datos, y los datos se han modificado, pero esta modificación aún no se ha enviado a la base de datos, esta cuestión otra transacción también accede a estos datos y luego usa estos datos

Lectura no repetible :

En la misma transacción, dos consultas idénticas arrojaron resultados diferentes (comparación de los datos leídos en sí), por ejemplo: durante la transacción 1, la transacción 2 modificó los datos de la operación de la transacción 1, debido a la modificación de la transacción 2 , Los datos leídos antes y después de la transacción 1 pueden ser diferentes

Lectura fantasma :

La primera transacción modifica los datos en una tabla. Esta modificación involucra todas las filas de datos en la tabla. Al mismo tiempo, la segunda transacción también modifica los datos en esta tabla. Esta modificación es insertar una nueva fila en la tabla. Datos, entonces aparecerá la primera transacción. Obviamente he modificado todos los datos, por qué hay un dato que no ha sido modificado, como una lectura mágica


Publicado 4 artículos originales · elogiado 4 · visitas 103

Supongo que te gusta

Origin blog.csdn.net/qq_40585384/article/details/105420602
Recomendado
Clasificación