índice MySQL, transacción

Tabla de contenido

índice

efecto

ver índice

crear índice

borrar índice

La estructura de datos detrás del índice

árbol B

árbol B+

asuntos

la naturaleza de los asuntos

características de las transacciones

Problemas derivados de la ejecución concurrente de transacciones

problema de lectura sucia

lectura no repetible

lectura fantasma

Nivel de aislamiento en MySQL

leer sin compromiso

readmitido

lectura repetible

serializable


índice

La esencia del índice es acelerar la velocidad de consulta de la base de datos. Pero hay ventajas y desventajas y, al mismo tiempo, se ha pagado un cierto precio:

  • costo de espacio para guardar el índice
  • Los índices pueden ralentizar la eficiencia de agregar, modificar y eliminar

Pero en general, los pros superan a los contras.

efecto

  1. La relación entre tablas, datos e índices en la base de datos es como la relación entre los libros en la estantería, el contenido de los libros y el catálogo de los libros.
  2. La función del índice es similar a la tabla de contenido del libro, que se utiliza para un rápido posicionamiento y recuperación de datos.
  3. Los índices son de gran ayuda para mejorar el rendimiento de la base de datos.

ver índice

crear índice

 Cree un directorio basado en el nombre de usuario en la tabla.

borrar índice

La estructura de datos detrás del índice

Reorganice los datos de acuerdo con una estructura de datos específica para acelerar las consultas.

Árbol B+: estructura de datos clave del índice. Una estructura de datos diseñada para la indexación de bases de datos.

árbol B

Conozcamos primero el árbol B

Un árbol B se puede considerar como un árbol de búsqueda N-ario.

 Debido a que el árbol B es un árbol de búsqueda de bifurcación N, cuando hay más subárboles en el nodo, las claves guardadas por el nodo también serán más, lo que significa que bajo la premisa de la misma cantidad de claves, la altura del El árbol B es más alto que el de dos árboles de búsqueda de Fork que son mucho más bajos.

Cuando la altura del árbol es mayor, el número de accesos al disco es mayor cuando se realiza la comparación de consultas.

árbol B+

Modificado después de la base del árbol B. También es un árbol de búsqueda N-ario.

 Todos los datos de todo el árbol se almacenan en los nodos de hoja y las claves en los nodos que no son de hoja eventualmente aparecerán en los nodos de hoja.

 Características del árbol B+

  •  Un nodo puede almacenar N claves, que se dividen en N intervalos (en lugar de N+1 intervalos).
  • El valor de la clave en cada nodo existirá en el nodo hoja y la clave es el valor máximo del nodo secundario.
  • El nodo de hoja del árbol B+ es una colección de datos completa. Solo los datos de cada fila de datos se almacenan en el nodo de hoja, en lugar del nodo de hoja, solo se almacena el valor clave en sí.

Ventajas del árbol B+

  • Se almacenan más claves en el nodo anterior y la altura final del árbol es relativamente más baja, lo que reduce la cantidad de visitas de IO durante la consulta.
  • Todos los nodos consultados eventualmente estarán en los nodos de hoja (para consultar cualquier dato, la cantidad de accesos IO pasados ​​es la misma)
  • Todos los nodos de hoja del árbol B+ forman una lista enlazada, que es más conveniente para la consulta de rango
  • Dado que los datos se almacenan en nodos de hoja, los nodos que no son de hoja solo almacenan valores clave, lo que da como resultado un espacio relativamente pequeño ocupado por nodos que no son de hoja.

El árbol B+ anterior es la forma en que MySQL organiza los datos.

Es decir, cuando ve una tabla bidimensional en una base de datos, de hecho, la tabla no almacena necesariamente datos en forma de tabla, y la estructura organizativa de los datos no está en el disco duro. también es muy probable que esté de acuerdo con el árbol B+ mencionado anteriormente para el almacenamiento.

La estructura específica depende de si hay índices en su tabla y el motor de almacenamiento utilizado por la base de datos.

La estructura de árbol B+ anterior se expande de acuerdo con el ID como índice de forma predeterminada.

asuntos

la naturaleza de los asuntos

Veamos primero la siguiente situación:

Por ejemplo, operación de transferencia:

Tabla de cuentas: cuenta (saldo de id)

Si el usuario 1 desea transferir 500 yuanes al usuario 2, entonces en la base de datos, el saldo del usuario 1 debe ser -500 y el saldo del usuario 2 + 500, de la siguiente manera SQL:
 

update account set balance = balance-500 where id = 1;

update account set balance = balance+500 where id = 2;

Si durante la ejecución de la base de datos, después de la ejecución del primer extracto, la base de datos se cae, se ha descontado el saldo del usuario 1, pero no se ha acreditado el saldo del usuario 2.

La transacción es para resolver los problemas anteriores.

La esencia de una transacción es empaquetar varias sentencias SQL en un todo, que se ejecuta con éxito o falla. En lugar de la situación de media ejecución anterior. Transacción Garantías Atomicidad

Si la situación anterior ocurre cuando se usa la transacción, después de ejecutar la primera declaración, la base de datos está inactiva y cuando la base de datos se reinicie la próxima vez, se restaurará la mitad de los datos modificados la última vez.

características de las transacciones

  1. Atomicidad (la característica principal).
  2. Consistencia Antes y después de la ejecución de la transacción, se debe garantizar la validez de los datos.
  3. Persistencia El contenido modificado por la transacción se escribe en el disco duro y persiste.
  4. Aislamiento El aislamiento aquí es para resolver el problema de la ejecución simultánea de transacciones.

Problemas derivados de la ejecución concurrente de transacciones

problema de lectura sucia

Una transacción A está en proceso de modificar los datos, pero antes de que se confirme, otra transacción B también lee los mismos datos, y la operación de B en este momento se convierte en una lectura sucia. Los datos leídos también son datos sucios. (Datos inválidos).

solución

Bloquee la operación de escritura.Después de bloquear la operación de escritura, los datos no se pueden leer al mismo tiempo cuando se modifican los datos, lo que significa que la operación de escritura y la operación de lectura no se pueden realizar al mismo tiempo y no se pueden ejecutar simultáneamente. .

Este bloqueo para las operaciones de escritura reducirá la eficiencia de la concurrencia, pero al mismo tiempo mejorará el aislamiento. Precisión de datos mejorada.

lectura no repetible

La transacción 1 envió los datos, la transacción 2 comenzó a leer los datos y, en el proceso de lectura, la transacción 3 envió nuevos datos.

Esto significa que la misma transacción 2 lee datos para esto, y los datos leídos son inconsistentes (se espera que en una transacción, los resultados de múltiples lecturas sean los mismos). Esto se llama lectura no repetible.

solución

Al bloquear la operación de lectura, significa que cuando se lee la base de datos, otras transacciones no pueden modificar los datos, lo que garantiza la coherencia de múltiples datos de lectura. Pero también reduce la eficiencia de la concurrencia. Se mejora aún más el aislamiento de las transacciones y se mejora la precisión de los datos.

lectura fantasma

Actualmente, aceptamos bloquear las operaciones de lectura y escritura, lo que resuelve los problemas de lecturas no repetibles y lecturas sucias.

Con la premisa de bloquear lecturas y bloqueos para escrituras, una transacción lee datos varias veces y descubre que los valores de los datos son los mismos, pero los conjuntos de resultados de los datos son diferentes. Esto crea el problema de lectura fantasma.

solución

La base de datos utiliza la serialización para resolver el problema de la lectura fantasma. Específicamente, abandona por completo el procesamiento de transacciones concurrentes y adopta un método en serie para procesar las transacciones una por una. De esta manera, el grado de concurrencia es el más bajo y la eficiencia también es la más baja. más bajo, pero el aislamiento es el más alto, y la precisión de los datos también es la mejor.

Para los problemas anteriores, MySQL proporciona 4 niveles de aislamiento, que corresponden a las situaciones anteriores.

Nivel de aislamiento en MySQL

leer sin compromiso

Sin ninguna restricción de bloqueo, el grado de concurrencia es el más alto y la eficiencia también es la más alta, pero el aislamiento es el más bajo y la precisión de los datos es la más baja.

readmitido

Se agregan bloqueos de escritura, se reduce el grado de concurrencia y se mejoran las filas de aislamiento.

lectura repetible

Tanto la escritura como la lectura están bloqueadas, se reduce el grado de concurrencia y se mejora el aislamiento

serializable

Ejecución minuciosamente serializada con el grado más bajo de simultaneidad y el más alto aislamiento.

Los cuatro niveles de aislamiento anteriores, pero el mecanismo incorporado de MySQL se puede configurar para que funcione en ese estado modificando el archivo de configuración de MySQL.

Supongo que te gusta

Origin blog.csdn.net/qq_63525426/article/details/131735991
Recomendado
Clasificación