Índice MySQL (avanzado)

Índice de MySQL

I. Panorama general

La definición oficial de
índice de MySQL es: índice (índice) es una estructura de datos (ordenada) que ayuda a MySQL a obtener datos de manera eficiente . Además de los datos, el sistema de base de datos también mantiene estructuras de datos que cumplen con algoritmos de búsqueda específicos. Estas estructuras de datos hacen referencia (señalan) a los datos de una manera determinada , de modo que los algoritmos de búsqueda avanzada se pueden implementar en estas estructuras de datos. Esta estructura de datos es una índice . Como se muestra en el siguiente diagrama esquemático:
Conocimientos suplementarios: el nodo de almacenamiento de árbol binario específico es pequeño a la izquierda y grande a la derecha . Los más pequeños que los datos del nodo se colocan a la izquierda y los más grandes que los datos del nodo se colocan a la derecha. .
Por ejemplo, los datos de la consulta 3 requieren una búsqueda de texto completo para encontrarlos, pero si desea encontrar los datos 3 después de la indexación, solo necesita buscar 3 veces para encontrarlos. Entonces, ¿cómo encuentra el índice los datos correspondientes? Como se muestra en la figura, apunta a los datos por referencia.
Inserte la descripción de la imagen aquí
A la izquierda está la tabla de datos. Hay dos columnas de siete registros. La más a la izquierda es la dirección física del registro de datos (tenga en cuenta que los registros lógicamente adyacentes no son necesariamente adyacentes físicamente en el disco). Para acelerar la búsqueda de Col2, se puede mantener un árbol de búsqueda binario como se muestra a la derecha. Cada nodo contiene una clave de índice y un puntero a la dirección física del registro de datos correspondiente, para que los datos correspondientes puedan ser rápidamente obtenido mediante la búsqueda binaria.

En términos generales, el índice en sí también es muy grande y es imposible almacenarlo todo en la memoria, por lo tanto, el índice a menudo se almacena en el disco en forma de archivo de índice. Los índices son la herramienta más común utilizada en las bases de datos para mejorar el rendimiento.

Estructura de dos índices

1 Estructura del índice

Los índices se implementan en la capa del motor de almacenamiento de MySQL , no en la capa del servidor. Por lo tanto, los índices de cada motor de almacenamiento no son necesariamente los mismos y no todos los motores de almacenamiento admiten todos los tipos de índices. MySQL actualmente proporciona los siguientes cuatro índices:

(1) Índice BTREE : el tipo más común de índice, la mayoría de los índices admiten el índice B-tree.

(2) Índice HASH : solo es compatible con el motor de memoria, con escenarios de uso simples.

(3) Índice de árbol R (índice espacial): El índice espacial es un tipo de índice especial del motor MyISAM. Se usa principalmente para tipos de datos geoespaciales. Por lo general, se usa menos y no se introducirá especialmente.

(4) Texto completo (índice de texto completo): El índice de texto completo también es un tipo de índice especial de MyISAM, que se utiliza principalmente para el índice de texto completo. InnoDB admite el índice de texto completo de la versión Mysql5.6.


MyISAM, InnoDB, Memory tres motor de almacenamiento compatible con varios tipos de índices

Índice BTREE Compatible Compatible Índice HASH No compatible No compatible Índice de árbol R compatible No compatible Compatible No compatible Texto completo compatible después de la versión 5.6 Compatible No compatible

Los índices de los que hablamos habitualmente, a menos que se especifique lo contrario, se refieren a los índices organizados por la estructura del árbol B + (árbol de búsqueda múltiple, no necesariamente binario). Entre ellos, el índice agrupado , el índice compuesto, el índice de prefijo y el índice único utilizan índices de árbol B + de forma predeterminada, que se denominan colectivamente índices.

2 ventajas y desventajas del índice

Ventaja

1) Similar al índice de catálogo de libros, mejora la eficiencia de la recuperación de datos y reduce el costo de IO de la base de datos.

2) Ordene los datos por columna de índice, reduzca el costo de clasificación de datos y reduzca el consumo de CPU.

Desventaja

1) De hecho, el índice también es una tabla, la clave principal y los campos de índice se almacenan en la tabla y apuntan al registro de la clase de entidad, por lo que la columna de índice también ocupa espacio.

2) Aunque el índice mejora enormemente la eficiencia de la consulta, también reduce la velocidad de actualización de la tabla, como INSERT, UPDATE y DELETE en la tabla. Porque al actualizar la tabla, MySQL no solo guarda los datos, sino que también guarda el archivo de índice cada vez que se actualiza el archivo de índice para agregar el campo de la columna de índice, ajustará la información del índice después de los cambios de valor clave provocados por la actualización.

Tres estructura BTREE y proceso de demostración.

El árbol B también se denomina árbol de búsqueda equilibrado multidireccional. Un árbol B con m bifurcaciones tiene las siguientes características:
(1) Cada nodo del árbol contiene como máximo m hijos
(2) Excepto por el nodo raíz y los nodos hoja, cada nodo tiene un menos [ceil (M / 2)] Hijos
(3) Si el nodo raíz no es un nodo hoja, tiene al menos 2 hijos
(4) Todos los nodos hoja están en la misma capa
(5) Cada nodo no hoja tiene n claves y n + 1 Composición de puntero, donde [ceil (m / 2) -1] <= n <= m-1, cuando n> m-1, el nodo intermedio se divide en nodos principales y los dos nodos se dividen en secundarios nodos.
Tome un número de 5 puntos como ejemplo, como se muestra en la figura:
Número de claves: 2 <= n <= 4, cuando n> 4, el nodo intermedio se divide en nodos principales y los nodos en ambos lados dividido en nodos secundarios. Los
datos son: CNGAHEKQMFWLTZDPRXYS
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Estructura de cuatro árbol B + y árbol B + en MySQL

(1) B + Tree es una variante de BTree. La diferencia entre los dos es la siguiente:
① El número de n bifurcaciones B + Tree contiene hasta n claves, y BTree contiene hasta n-1 claves.
② Los nodos hoja del árbol B + almacena toda la información clave., Organizada en orden de tamaño de clave

El diagrama de estructura de la parte índice B + Árbol de todos los nodos no hoja que se pueden considerar claves es el siguiente:
Inserte la descripción de la imagen aquí

(2) La estructura de datos del índice MySQL optimiza el árbol B + clásico, agregando un puntero de lista vinculada a los nodos hoja adyacentes, formando un árbol B + con punteros secuenciales, mejorando el rendimiento de acceso del intervalo.
Diagrama esquemático de la estructura del árbol B + de MySQL:
Inserte la descripción de la imagen aquí

Clasificación de cinco índices

(1) Índice de valor único: es decir, un índice contiene solo una columna y una tabla no puede tener múltiples índices de una sola columna
(2) Índice único: el valor de la columna de índice debe ser único, pero se permite el control. como número de teléfono móvil, número de tarjeta bancaria, etc. Debe ser único
(3) Índice compuesto: es decir, un índice contiene varias columnas, como número de teléfono móvil y número de tarjeta bancaria. Si los datos de una tabla tienen varios campos siempre aparecen al mismo tiempo al realizar consultas, estos campos se pueden utilizar como un índice compuesto

Sintaxis de seis índices

1 Crea un índice

(1) Gramática

CREAR [ÚNICO | TEXTO COMPLETO | ESPACIAL] ÍNDICE nombre del índice
[USANDO el tipo de índice]
EN el nombre de la tabla para crear el índice (el campo para crear el índice);

(2) Caso

createt index idx_city_name on city(city_name);

2 Ver índice

(1) Gramática

MOSTRAR FORMULARIO DE ÍNDICE para crear el nombre de la tabla del índice;

(2) Caso

show index from city;

3 Eliminar índice

(1) Gramática

DROP INDEX nombre de índice ON nombre de tabla;

(2) Caso

drop index idx_city_name on city;

4 comando ALTER para crear un índice

(1) Gramática

① alterar el nombre de la tabla de la tabla agregar la clave primaria (campo); agregar el índice de la clave primaria, que debe ser único y no puede ser nulo
② modificar el nombre de la tabla de la tabla agregar el nombre del índice único (campo); el índice único puede ser nulo
③ modificar el nombre de la tabla de la tabla agregar índice nombre del índice (campo); agregar índice ordinario, puede aparecer varias veces
④ modificar el nombre de la tabla agregar el nombre del índice de texto completo (campo); agregar índice de texto completo

5 Uso del índice

(1) Coincidencia de valor completo
Especifique punteros específicos para todas las columnas del índice. En este caso, el índice tiene efecto y la eficiencia de ejecución es alta.
Inserte la descripción de la imagen aquí
(2) La regla del prefijo más a la izquierda (subir las escaleras)
Si el índice introduce varias columnas, se debe observar la regla del prefijo más a la izquierda. La consulta comienza en la columna más a la izquierda del índice y no omite las columnas indexadas, es decir, la columna en el lado izquierdo del índice se incluye (similar a las escaleras en el primer piso).
Inserte la descripción de la imagen aquí
(3) Intente utilizar un índice de cobertura (que incluya solo los campos de la columna de índice) para evitar seleccionar * y generar consultas de regreso a la tabla.
Inserte la descripción de la imagen aquí
Puntos adicionales:

using index: aparece cuando se usa un índice de cobertura.
using where: al buscar y usar un índice, debe volver a la tabla para consultar los datos.
usando la condición de índice: buscar y usar el índice, debe volver al tabla para consultar los datos
usando el índice; usando where: busca y usa el índice, pero los datos requeridos están en Se pueden encontrar en la columna de índice, de lo contrario, volverá a la consulta de la tabla

6 Fallo de índice

(1) Consulta de rango, el índice de la columna de la derecha no es válido
Inserte la descripción de la imagen aquí

(2) Utilice operaciones aritméticas en la columna de índice, el índice no es válido
Inserte la descripción de la imagen aquí
(3) El tipo de cadena no agrega comillas simples, el índice no es válido
Inserte la descripción de la imagen aquí
(4) o el índice no es válido
Inserte la descripción de la imagen aquí
(5) como "**% ** condiciones" Invalidación del índice
Inserte la descripción de la imagen aquí
Use un índice de cobertura para resolver la ambigüedad El problema de falla del índice de
Inserte la descripción de la imagen aquí
(6) nulo y es nulo los índices a veces fallan y otras no. Observe principalmente los datos de la tabla. Si la mayor parte del volumen de datos tiene valor, entonces nulo irá al índice, si la mayoría de ellos son nulos, irá al índice nulo
(7) En tomar índice, no en índice no es válido
Inserte la descripción de la imagen aquí

Siete principios de diseño de índices

(1) Indexe las tablas con alta frecuencia de consulta y gran cantidad de datos.
(2) La mejor columna candidata del campo de índice se obtiene de las condiciones de la cláusula where. Si hay muchas combinaciones en la cláusula where, seleccione común, La combinación de columnas con el mejor efecto de filtrado se convierte en un índice compuesto.
(3) Utilice un índice único. Cuanto mayor sea el grado de discriminación, mayor
será la eficiencia del uso del índice. (4) El índice no es mejor. Cuanto más el índice, el DML correspondiente como insertar, actualizar y eliminar. Para las tablas que operan con más frecuencia, aumentará los costos de mantenimiento y reducirá la eficiencia de las operaciones de DML.
(5) Utilice un índice corto. Una vez creado el índice, el disco duro se utiliza para el almacenamiento. Mejorar la eficiencia de IO del acceso al índice puede mejorar la eficiencia general del acceso. El campo del índice es relativamente corto, por lo que un tamaño determinado de bloque de almacenamiento puede almacenar más valores de índice, para mejorar la eficiencia del acceso de mysql a IO.
(6) Utilizando el prefijo más a la izquierda, un índice compuesto compuesto por N columnas equivale a crear índices N. Cuando la cláusula where usa los campos del índice compuesto, se mejorará la eficiencia de la consulta.
P.ej:

创建复合索引:
create index idx_name_email_status on tb_seller(name,email,status);
相当于:
	对name创建索引;
	对name,email创建索引;
	对name,email,Status创建索引;

Supongo que te gusta

Origin blog.csdn.net/hcyxsh/article/details/114787376
Recomendado
Clasificación