Índice agrupado MySQL e índice no agrupado

Análisis y respuesta

Cuando un registro en la base de datos contiene varios campos, un árbol B+ solo puede almacenar la clave principal. Si se recupera un campo de clave no principal, el índice de clave principal perderá su efecto y se convertirá en una búsqueda secuencial. En este momento, se debe establecer un segundo conjunto de índices en la segunda columna que se recuperará. Este índice está organizado por árboles B+ independientes. Existen dos métodos comunes para resolver el problema de que varios árboles B+ accedan al mismo conjunto de datos de la tabla, uno se llama índice agrupado y el otro se llama índice no agrupado (índice secundario). Aunque estos dos nombres se denominan índices, este no es un tipo de índice separado, sino un método de almacenamiento de datos.

índice agrupado

Para el almacenamiento de índice agrupado, los datos de fila y el árbol B+ de clave primaria se almacenan juntos, el árbol B+ de clave secundaria solo almacena la clave secundaria y la clave primaria, y el árbol B+ de clave primaria y de clave no primaria son casi dos tipos de árboles. .

InnoDB utiliza un índice agrupado, que organiza la clave primaria en un árbol B+, y los datos de la fila se almacenan en el nodo hoja. Si usa la condición "donde id = 14" para buscar la clave primaria, siga el árbol B+ algoritmo de búsqueda, se puede encontrar el nodo hoja correspondiente y luego se pueden obtener los datos de la fila. Si se realiza una búsqueda condicional en la columna Nombre, se requieren dos pasos: el primer paso es recuperar el Nombre en el árbol del índice auxiliar B+ y llegar a su nodo hoja para obtener la clave primaria correspondiente. En el segundo paso, utilice la clave principal para realizar otra operación de recuperación del árbol B+ en la especie de árbol B+ del índice principal y, finalmente, llegue al nodo hoja para obtener la fila completa de datos.

índice no agrupado

Para el almacenamiento de índices no agrupados, el árbol B+ de clave primaria almacena punteros a filas de datos reales en los nodos hoja, no la clave primaria.

MyISM utiliza un índice no agrupado. Los dos árboles B+ del índice no agrupado tienen el mismo aspecto. La estructura de los nodos es exactamente la misma, pero el contenido almacenado es diferente. Los nodos del árbol B+ del índice de clave principal almacenan el clave principal y el árbol de índice de clave auxiliar B+ almacena claves accesorias. Los datos de la tabla se almacenan en un lugar independiente. Los nodos de hoja de los dos árboles B+ usan una dirección para apuntar a los datos reales de la tabla. Para los datos de la tabla, no hay diferencia entre las dos claves. Dado que el árbol de índice es independiente, la recuperación mediante clave secundaria no requiere acceso al árbol de índice para la clave principal.

La diferencia entre un índice agrupado y un índice no agrupado

Suponemos que una tabla almacena 4 filas de datos como se muestra en la siguiente figura. Donde Id es el índice principal y Nombre es el índice secundario. El diagrama muestra claramente la diferencia entre índices agrupados y no agrupados.

 Nos centramos en el índice agrupado. Parece que la eficiencia del índice agrupado es obviamente menor que la del índice no agrupado, porque cada vez que se utiliza el índice auxiliar para buscar, se requieren dos búsquedas en el árbol B +. ¿superfluo? ¿Cuáles son las ventajas de los índices agrupados?

  1. Dado que los datos de la fila y los nodos hoja se almacenan juntos, la clave primaria y los datos de la fila se cargan juntos en la memoria, y los datos de la fila se pueden devolver inmediatamente cuando se encuentra el nodo hoja. Si los datos están organizados de acuerdo con el nodo hoja primario ID de clave, los datos se pueden obtener más rápido.
  2. La ventaja de utilizar la clave principal como "puntero" en lugar de utilizar el valor de la dirección como puntero para el índice auxiliar es que reduce el trabajo de mantenimiento del índice auxiliar cuando se mueven filas o se divide la página de datos. El valor clave como puntero hará que el índice auxiliar ocupe más. El beneficio a cambio es que InnoDB no necesita actualizar este "puntero" en el índice auxiliar al mover filas. Es decir, la posición de la fila (posicionada por la página de 16K en la implementación, que se tratará más adelante) cambiará con la modificación de los datos en la base de datos (la división de nodo del árbol B+ anterior y la división de página), y se puede utilizar el índice agrupado. Se garantiza que no importa cómo cambien los nodos del árbol de clave primaria B+, el árbol de índice auxiliar no se verá afectado.

Asistente de entrevistas de Meow: solución integral para las preguntas de la entrevista. Puede buscar en el subprograma WeChat [Asistente de entrevistas de Meow]  o seguir [Preguntas de Meow Brush] ->  Preguntas gratuitas del Asistente de entrevistas. Si tiene buenos conocimientos o habilidades para las entrevistas, ¡esperamos poder compartirlos!

Supongo que te gusta

Origin blog.csdn.net/jjclove/article/details/127391069
Recomendado
Clasificación