En cuanto al índice MySQL, aquí está mi acabado.

índice

¿Qué es un índice?

El índice es similar al directorio de un libro. Si queremos encontrar un determinado contenido en un libro, necesitamos buscar el directorio correspondiente y ubicar el número de página correspondiente. El motor de almacenamiento MySQL usa un método similar para realizar consultas, primero ve al índice para encontrar el valor correspondiente, y luego Busque la fila correspondiente según el valor del índice coincidente.

¿Cuáles son los beneficios de la indexación?

1. Mejore la eficiencia de la recuperación de datos y reduzca los costos de E / S de la base de datos: El propósito de usar índices es reducir los registros que deben consultarse en la tabla para acelerar la recuperación de datos.
2. Reduzca el costo de clasificación de datos y el consumo de CPU: La razón por la cual se busca el índice rápidamente es porque primero ordena los datos. Si el campo solo necesita ser ordenado, el costo de clasificación de datos se reduce.

¿Cuáles son las desventajas de los índices?

1. Ocupa espacio de almacenamiento adicional. Es esencialmente una tabla, que almacena la clave principal y los campos de índice, y existe como un archivo de índice en el disco.
2. La eficiencia de actualización de datos se reduce. Si los datos se actualizan, entonces El índice también debe actualizarse, lo que reduce la velocidad de las actualizaciones de datos. De lo contrario, los datos físicos señalados por el índice pueden ser incorrectos.Esta también es una razón para la falla del índice.

¿Tipo de índice?

Los índices se almacenan en la capa del motor de almacenamiento y existen principalmente los siguientes 6 tipos:

  1. Índice ordinario: el índice más ordinario, sin restricciones.
  2. Índice único: similar al índice ordinario, pero con restricciones únicas
  3. Índice de clave principal: índice único especial, sin valor nulo
  4. Índice conjunto: combine varias columnas para crear un índice, que puede cubrir varias columnas
  5. Índice de clave externa: solo InnoDB admite el uso del índice de clave externa, para mantener la coherencia, la integridad y las operaciones en cascada de los datos
  6. Índice de texto completo: el propio índice de texto completo de MySQL solo admite InnoDB y MyISAM, y solo se puede buscar en inglés, generalmente se aplica un motor de búsqueda de texto completo.

¿El principio de "creación" del índice?

  1. El lugar más adecuado para que aparezca el índice es la columna que aparece en la cláusula where, no la columna que aparece después de la selección.
  2. Cuanto mayor sea la cardinalidad de la columna de índice, mejor será el efecto del índice
  3. Crear un índice conjunto de acuerdo con la situación, puede mejorar la eficiencia de la consulta.
  4. Evite crear demasiados índices, los índices ocuparán espacio adicional y reducirán la eficiencia de la escritura.
  5. La clave principal debe elegir el tipo de datos más corto tanto como sea posible, lo que puede reducir efectivamente la ocupación del disco del índice y mejorar la eficiencia de la consulta.
  6. Para indexar cadenas, se debe personalizar la longitud de un prefijo, lo que puede ahorrar mucho espacio.

¿Por qué utilizar índices?

En una palabra: porque el índice nos permite evitar el escaneo completo de la tabla para verificar los datos, lo que mejora la eficiencia de la consulta.
全表扫描: Un escaneo de tabla completo consiste en cargar todos los datos de la tabla en la memoria en todos o en lotes. La unidad más pequeña de almacenamiento es un bloque o página, que se compone de varias filas de datos, y luego cargamos estos bloques en la memoria. , Y luego busque los datos mediante sondeo, busque los datos que necesitamos y luego regrese. En términos generales, pensamos que este método de consulta es más lento, pero no en un sentido absoluto. Cuando la cantidad de datos es pequeña, la eficiencia de escanear todo el disco es mayor. Después de todo, se basa en la memoria. Definitivamente es más eficiente. Rápido.

¿Qué tipo de información se puede indexar?

La respuesta simple es: clave primaria, clave única o clave ordinaria, siempre que tenga una cierta cantidad de datos se puede usar como índice

¿La estructura de datos del índice?

Introducción

La corriente principal actual es el árbol B +, así como la estructura Hash y BitMap. MySQL no soporta la estructura BitMap. Al mismo tiempo, MySQL basado en motores InnoDB y MyISAM no soporta la estructura Hash.

Analiza los pros y los contras

Árbol B +

Antes de hablar del árbol B +, hablemos del árbol de búsqueda binaria y del árbol B

  1. También se puede buscar en el árbol de búsqueda binaria. La complejidad de tiempo es O (log n), pero cada árbol tiene solo dos nodos secundarios. Si no se cumplen las condiciones, debe ingresar a la capa inferior para buscar nuevamente. El cuello de botella del sistema es IO. En este caso, una vez que la cantidad de datos sea grande, habrá un cuello de botella en el sistema y habrá una situación extrema. Si los datos se insertan en un lado del árbol, haciendo que el árbol binario sea una lista vinculada, la complejidad del tiempo es O (n)
  2. En el caso del árbol B, cuando se está actualizando datos, el árbol B se fusionará y desensamblará según sus características para lograr un equilibrio. No habrá situaciones extremas como árboles de búsqueda binaria, pero hay otros problemas, como la búsqueda. Cuando se trata de una búsqueda de rango, el árbol B tendrá un cuello de botella en el sistema y habrá múltiples IO.
  3. Finalmente, hablemos del árbol B +, que es diferente del árbol B. La capa inferior de sus nodos hoja está conectada por una lista enlazada, que puede resolver la situación de múltiples IO causada por la búsqueda de rango.

Estructura hash

La estructura hash utiliza palabras clave como claves y datos como valores para el almacenamiento. Solo se aplica a == o en la búsqueda, y no admite la búsqueda por rango, porque calcula el valor hash en función de las palabras clave, por lo que estos datos no se encontrarán si solo se utiliza una parte de una palabra clave. Y no admite la búsqueda de comparación, porque el valor hash calculado según el índice no puede determinar el tamaño de los datos originales. También tiene un inconveniente: en casos extremos, si la clave calculada en función de la palabra clave se encuentra en el mismo depósito, entonces su estructura se ha vuelto lineal y la eficiencia de la consulta no es tan buena como el árbol B +.

BitMap

Su granularidad de bloqueo es muy grande Al insertar o actualizar datos, las operaciones de datos en el mismo mapa de bits que estos datos se bloquearán, lo que no es adecuado para sistemas de procesamiento en línea con alta concurrencia.

Es adecuado para su uso en escenarios con menos concurrencia y más estadísticas.

En conclusión

El último que se usa comúnmente es el árbol B +, lo siguiente resume por qué se usa comúnmente:

  1. Sus datos se almacenan en nodos hoja, y los nodos no hoja almacenan las palabras clave correspondientes a estos datos. La implicación es que los nodos no hoja pueden almacenar más palabras clave, de modo que se pueden recuperar más palabras clave a través de un IO Palabras clave, reducirá la cantidad de IO y mejorará la eficiencia de las consultas
  2. Su complejidad de tiempo de consulta es muy estable, su única consulta debe pasar por el proceso de consulta desde el nodo raíz hasta el nodo hoja, y la complejidad de tiempo es O (log n)
  3. Es más propicio para escanear la base de datos y admite consultas de rango.

¿Índice agrupado e índice no agrupado?

Este punto de conocimiento comienza con la consideración de los motores de almacenamiento InnoDB y MyISAM.

¿Qué es un índice agrupado? ¿Qué es un índice no agrupado?

En la estructura del índice agrupado: su nodo hoja contiene una pieza correspondiente de datos reales.
En la estructura de un índice no agrupado: sus nodos hoja incluyen solo la información del valor del índice y la dirección física correspondiente a la fila de datos.

La diferencia entre MyISAM e InnoDB

Ya sea un índice de clave principal, un índice de clave única o un índice de clave común en MyISAM, es un índice no agrupado.
Además del índice no agrupado en InnoDB, también genera un índice agrupado. Los nodos hoja de un índice no agrupado en InnoDB contienen información de índice de clave primaria. Si se especifica la clave principal al diseñar la tabla, entonces la estructura de índice generada por esta clave principal es un índice agrupado. Si no se especifica, el primer índice único no vacío de la tabla se especificará como índice agrupado. Si no se cumple, InnoDB Internamente se genera una clave primaria oculta (índice denso). Esta clave primaria oculta es una columna de 6 bytes cuyo valor aumentará con la inserción de datos, lo que significa que nuestro InnoDB debe tener una clave primaria, y la clave primaria Debe ser el único índice denso

Debido a que el índice de clave principal de InnoDB y los datos en sí se almacenan en el mismo archivo, los datos se cargan mientras se carga el archivo de índice de clave principal. Si encuentra un elemento a través de un índice disperso, la clave se recuperará del árbol B ± del índice disperso, se ubicará la información de la clave principal y luego se realizará un paso. La información de la clave principal se recuperará en el índice de clave principal para encontrar la fila de información.这里就会出现一个覆盖索引的考点,如果select中查找的就是某个索引值的话,那么就不会进行回表查询了,这也就是常说的覆盖索引的情况

MyISAM utiliza un índice disperso: el índice de la clave principal se coloca en un archivo, el índice de la clave secundaria se coloca en un lugar y la información de los datos se coloca en un archivo separado. Los nodos hoja de los dos índices utilizan la información de dirección que apunta al archivo

La información de la estructura de la tabla se almacena en el archivo xxx.frm. En InnoDB, el índice y los datos se almacenan en el archivo xxx.ibd, mientras que el índice MyISAM y los datos están separados. El índice se almacena en xxx.MYI y los datos se almacenan en xxx. En MYD

Temas relacionados con el índice

¿Cómo localizar y optimizar SQL de consulta lenta?

Primero, la consulta lenta SQL se ubicará de acuerdo con el registro lento. El registro lento se usa para registrar el SQL que ejecutamos con relativa lentitud. Si el tiempo de ejecución de un SQL supera los 10 segundos (predeterminado), este registro se colocará en el archivo de registro lento.

Puede utilizar explica y otras herramientas para analizar SQL

Modifique SQL o deje que SQL tome el índice tanto como sea posible

¿Cuál es la causa de la coincidencia más a la izquierda del índice de articulación?

¿Cuál es el principio de coincidencia más a la izquierda?

Si ahora estamos usando un índice conjunto y usando múltiples columnas para crear un índice (a, b), en este momento tenemos una declaración de consulta: seleccione * de la tabla donde a = xx y b = xx, él puede usar este índice conjunto, Y seleccione * de la tabla donde b = xx no puede tomar este índice conjunto.

Coincidencia más a la izquierda: MySQL buscará de izquierda a derecha de acuerdo con la información en la declaración where, y dejará de hacer coincidencias hasta que encuentre (<,>, between, like), como a = 3 y b = 4 yc> 5 y d = 6, tal información, entonces no se usa un índice conjunto como (a, b, c, d), y se usará un índice como (a, b, d, c). El orden de a, b, c, d se puede ajustar

== y en pueden estar fuera de orden, por ejemplo, a = 1 y b = 2 y c = 3 para crear (a, b, c) los índices pueden estar en cualquier orden, y el optimizador de mysql puede optimizarlos en una forma que el índice pueda reconocer.

¿Por qué existe tal causa? Porque el motor de almacenamiento creará un árbol B + basado en este campo combinado, y luego el primer nivel es a, que es el campo más a la izquierda del índice, y su elemento correspondiente es el más a la izquierda, y luego encontrará la siguiente línea El nodo con un valor continúa mirando hacia abajo. Por lo tanto, si la búsqueda inicial no se realiza a través del campo a, no encontrará ningún valor a través de este índice.

¿Se crea el índice tantos como sea posible?

¡La respuesta es definitivamente no! Si la cantidad de datos que tenemos es pequeña, pero el índice está construido tanto, es equivalente a la cantidad de páginas del libro. Podría encontrarlo rápidamente buscando desde cero, pero he establecido muchos catálogos. Primero, busque el catálogo. Luego, encuentre el valor según el catálogo. ¿No es una pérdida de tiempo? Jaja. Y para establecer muchos índices, el mantenimiento también es muy problemático. Entonces, en resumen, ¡el índice no se construye tantos como sea posible!

Supongo que te gusta

Origin blog.csdn.net/MarkusZhang/article/details/108397811
Recomendado
Clasificación