Tabla de contenido
La estructura de datos detrás del índice
características de las transacciones
Problemas derivados de la ejecución concurrente de transacciones
í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
- 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.
- 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.
- 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
- Atomicidad (la característica principal).
- Consistencia Antes y después de la ejecución de la transacción, se debe garantizar la validez de los datos.
- Persistencia El contenido modificado por la transacción se escribe en el disco duro y persiste.
- 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.