Estructura de datos del índice de la base de datos Mysql (HashMap, BTree, B + Tree)

Directorio

  • Resumen
  • Índice de estructura HashMap
  • Estructura de datos de árbol binario
  • Estructura de datos del árbol B
  • Estructura de datos B + Tree

Uno: Descripción general

1. Definición de índice

La definición oficial de índice de MySQL es: Index (Index) es una estructura de datos que ayuda a MySQL a obtener datos de manera eficiente . La esencia del índice se puede obtener extrayendo la columna vertebral de la oración: el índice es una estructura de datos .

La consulta de la base de datos es una de las funciones principales de la base de datos. El algoritmo de consulta más básico es la búsqueda lineal. La complejidad del tiempo es O (n). Obviamente, la eficiencia es muy baja cuando la cantidad de datos es grande. Algoritmos de búsqueda optimizados como búsqueda binaria (búsqueda binaria), búsqueda de árbol binario (búsqueda de árbol binario), etc., aunque se ha mejorado la eficiencia de búsqueda. Pero cada uno tiene sus propios requisitos para los datos recuperados: la búsqueda binaria requiere que se recuperen los datos ordenados, y la búsqueda de árboles binarios solo se puede aplicar a los árboles de búsqueda binarios, pero la estructura organizativa de los datos en sí no puede satisfacer completamente varias estructuras de datos (por ejemplo, teoría Es imposible organizar ambas columnas en orden al mismo tiempo). Por lo tanto, además de los datos, el sistema de base de datos también mantiene una estructura de datos que satisface un algoritmo de búsqueda específico. Estas estructuras de datos hacen referencia (apuntan) a los datos de alguna manera para que se puedan implementar algoritmos de búsqueda avanzada en estas estructuras de datos . Esta estructura de datos es un índice.

2. Beneficios del uso de índices

El uso razonable de índices puede mejorar en gran medida la eficiencia de recuperación de la base de datos . Cuando se enfrentan a tablas de datos grandes, el uso de índices es una forma común de mejorar la eficiencia de las consultas. (Aquí, por lo general, el número de filas de la tabla es mayor que 3000 filas, use el índice. Cuando la cantidad de datos es demasiado pequeña, se recomienda usar la búsqueda de tabla completa).

3. Use el protocolo de índice

De acuerdo con las estipulaciones del índice en las estipulaciones Ali JAVA, resuma las siguientes precauciones para el uso de índices.

  1. Campos [obligatorios] con características únicas en el negocio, incluso si se trata de una combinación de múltiples campos, también se debe construir un índice único .
    Nota: No piense que el índice único afecta la velocidad de inserción . Esta pérdida de velocidad se puede ignorar, pero el aumento en la velocidad de búsqueda es obvio. Además, incluso si se realiza un control de verificación muy perfecto en la capa de aplicación, siempre que no haya un índice único, de acuerdo con la ley de Murphy, Debe haber datos sucios.

  2. [Obligatorio] Más de tres mesas tienen prohibido unirse. Para los campos que deben unirse, los tipos de datos deben ser absolutamente consistentes; cuando las consultas relacionadas con varias tablas, asegúrese de que los campos relacionados deben tener índices .
    Nota: Incluso con combinaciones de tablas duales, se debe prestar atención a los índices de tabla y al rendimiento de SQL.

  3. [Obligatorio] Al crear un índice en un campo varchar, debe especificar la longitud del índice . No es necesario indexar todo el campo. La longitud del índice se puede determinar de acuerdo con la discriminación de texto real.
    Nota: La longitud del índice y el grado de discriminación son un par de contradicciones. Generalmente, para un tipo de datos de cadena, un índice con una longitud de 20, ** El grado de discriminación será tan alto como 90% o más. , Índice de longitud)) / cuenta (*) ** para determinar el grado de discriminación. izquierda representa el principio del prefijo más a la izquierda del índice

  4. [Obligatorio] La búsqueda de la página está estrictamente prohibida a la izquierda o al desenfoque completo , si es necesario, vaya al motor de búsqueda para resolverlo.
    Nota: El archivo de índice tiene la característica de coincidencia de prefijo más a la izquierda de B-Tree . Si no se determina el valor a la izquierda, este índice no se puede usar.

  5. [Recomendado] Si hay un orden por escena, preste atención al orden del índice . El último campo de orden por es parte del índice combinado , y se coloca al final del orden de combinación de índice para evitar la situación de file_sort y afectar el rendimiento de la consulta.
    Ejemplo positivo: donde a =? Y b =? Ordenar por c; Índice: a_b_c
    Ejemplo de contador: si hay una búsqueda de rango en el índice, entonces el orden del índice no se puede usar, como: DONDE a> 10 ORDER BY b; El índice a_b no se puede ordenar.

  6. [Recomendado] Utilice el índice de cobertura para realizar operaciones de consulta y evitar volver a la tabla.
    Ejemplos positivos: la capacidad de establecer el tipo de índice se divide en índice de clave principal, el único índice, el índice general de tres, y un efecto que cubre el índice es sólo una consulta, los resultados explican el uso, aparecerán columnas adicionales: mediante el índice.

  7. [Recomendado] Utilice correlación retrasada o subconsultas para optimizar escenarios de paginación de superpágina múltiple .
    Nota: MySQL no omite la fila de desplazamiento, pero toma la fila de desplazamiento + N, y luego devuelve la fila de desplazamiento antes de darse por vencido, y devuelve N filas. Cuando el desplazamiento es particularmente grande, la eficiencia es muy baja, o controla el número total de páginas devueltas O reescriba SQL para páginas que exceden un cierto umbral .
    Ejemplo positivo: Localice rápidamente el segmento de identificación que se va a obtener y luego asocie: SELECCIONE a. * DESDE la tabla 1 a, (seleccione la identificación de la tabla 1 donde la condición LÍMITE 100000,20) b donde a.id = b.id

  8. [Recomendado] El objetivo de la optimización del rendimiento de SQL: al menos para alcanzar el nivel de rango , el requisito es el nivel de referencia, si puede ser lo mejor posible.
    Explicación:
    1) Hay como máximo una fila coincidente (clave principal o índice único) en la tabla única de concursos, y los datos se pueden leer durante la etapa de optimización.
    2) ref se refiere al uso del índice normal (índice normal).
    3) Rango busca el rango del índice.

  9. [Recomendado] Al crear un índice combinado, el mayor grado de diferenciación está a la izquierda .
    Ejemplo positivo: si donde a =? Y b =?, Si la columna a está casi cerca de un valor único , entonces solo necesita construir el índice idx_a .
    Nota: Cuando hay una mezcla de signo no igual y signo igual, coloque la columna de condición de signo igual al frente al construir el índice . Tales como: donde c>? Y d =? Entonces, incluso si la discriminación de c es mayor, debe poner d en la columna superior del índice, es decir, el índice idx_d_c.

  10. [Referencia] Evite crear los siguientes malentendidos extremos al crear un índice:
    1) No se lo pierda . Piensa que una consulta necesita construir un índice.
    2) No te excedas . Se cree que el índice consumirá espacio, ralentizará seriamente la actualización y la nueva velocidad de adición.
    3) Resista el índice único . Se cree que la singularidad de la empresa debe resolverse mediante el método "verificar antes de insertar" en la capa de aplicación.


Publicado 27 artículos originales · elogiado 0 · visitas 9934

Supongo que te gusta

Origin blog.csdn.net/weixin_38246518/article/details/89528812
Recomendado
Clasificación