mysql-index; explicar parámetro

Índice de mysql

  • La definición
    de índice La definición oficial de índice de Mysql es: índice (índice) es una estructura de datos que ayuda a Mysql a obtener datos de manera eficiente.
    Simplemente entendido como: estructura de datos ordenada y verificada rápidamente, el índice afectará el orden por y dónde las consultas
  • El propósito
    de la indexación es mejorar de manera eficiente la eficiencia de las consultas, que puede ser análoga a un diccionario.

Inserte la descripción de la imagen aquí
El índice en sí también es muy grande, es imposible almacenarlo todo en la memoria, por lo que el índice a menudo se almacena en el disco en forma de archivo de índice.

Los índices de los que hablamos habitualmente, a menos que se especifique lo contrario, se refieren al índice organizado de datos del árbol B (árbol de búsqueda múltiple, no necesariamente el árbol binario), incluido el índice agrupado, el índice secundario, el índice compuesto, el índice de prefijo y el índice único. Índice, el valor predeterminado es utilizar el índice de árbol B +, denominado colectivamente índice. Por supuesto, además del tipo de índice de árbol B +, existen índices hash, etc.

Ventajas de la indexación

  • Ventajas
    Reducir el costo de E / S de la base de
    datos Ordene los datos a través de columnas de índice, reduzca el costo de clasificación de datos y reduzca el consumo de CPU

  • Desventajas
    De hecho, el índice también es una especie de tabla: la tabla establece la clave principal y los campos de índice, y apunta a los registros de la tabla de entidad, por lo que la columna de índice también ocupa espacio.
    Aunque el índice mejora en gran medida la velocidad de consulta, también reducirá la velocidad de actualización de la tabla, como INSERT, UPDATE y DETLETE en la tabla, porque al actualizar la tabla, MYSQL no solo guarda los datos, sino que también guarda el archivo de índice. .Cada actualización agrega un índice. Los campos de columna ajustarán la información del índice después de los cambios de valor clave provocados por la actualización.
    Los índices son solo un factor para mejorar la eficiencia. Si hay tablas con una gran cantidad de datos en MYSQL, necesita dedicar tiempo a investigar los mejores índices para currículums u optimizar declaraciones de consultas.

Clasificación de índice

  1. Índice de valor único
    significa que un índice contiene una sola columna y que una tabla puede tener varios índices de una sola columna.

  2. Índice único
    El valor de la columna de índice debe ser único, pero se permiten valores nulos

  3. Índice compuesto
    Utilice el número de tarjeta bancaria y el número de tarjeta de identificación Índice de reanudación en el sistema bancario
    Sugerencia: no se deben establecer más de cinco índices en una tabla

Formas de crear y eliminar índices

1. Índice ordinario
CREAR ÍNDICE indexName ON mytable (nombre de usuario (longitud));
especifique directamente al crear la tabla:

CREATE TABLE mytable (
ID INT NOT NULL,
username VARCHAR (16) NOT NULL,
INDEX [indexName] (username (length))
);
Sintaxis para eliminar un índice:
DROP INDEX [indexName] ON mytable;

2. Índice único
Es similar a un índice ordinario, excepto que el valor de la columna de índice debe ser único, pero se permiten valores nulos. Si es un índice compuesto, la combinación de valores de columna debe ser única.

Crear un índice:
CREATE UNIQUE INDEX indexName ON mytable (columnname (length))
Modificar la estructura de la tabla:
ALTER mytable ADD UNIQUE [indexName] ON (columnname (length))

Especifique directamente al crear la tabla:
CREATE TABLE mytable (
ID INT NOT NULL,
username VARCHAR (16) NOT NULL,
UNIQUE [indexName] (username (length))
);

  • Hay cuatro formas de agregar el índice de la tabla de datos:

1. ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): Esta declaración agrega una clave primaria, lo que significa que el valor del índice debe ser único y no puede ser NULL.
2. ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): El valor del índice creado por esta declaración debe ser único (excepto NULL, NULL puede aparecer varias veces).
3. ALTER TABLE tbl_name ADD INDEX index_name (column_list): agregue un índice común, el valor del índice puede aparecer varias veces. 4. ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list): Esta declaración especifica que el índice es FULLTEXT, que se utiliza para la indexación de texto completo.

Por ejemplo:
crear índice: ALTER TABLE testalter_tbl ADD INDEX ©;
eliminar índice: ALTER TABLE testalter_tbl DROP INDEX ©;

Mostrar información de índice
MOSTRAR ÍNDICE FROM table_name \ G

estructura del índice mysql

- BTree

  • Índice hash
  • índice de texto completo
  • Índice de árbol R

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

¿En qué circunstancias es necesario crear un índice?
  1. La clave principal crea automáticamente un índice único.
  2. Los campos que se utilizan con frecuencia como condiciones de consulta deben indexarse
  3. Consultar los campos asociados con otras tablas en la consulta y crear un índice para la relación de clave externa
  4. Los campos que se actualizan con frecuencia no son adecuados para la creación de índices, porque cada actualización no solo actualizará el registro, sino que también actualizará el índice.
  5. No cree índices para campos que no se utilicen en la condición Where
  6. La elección del índice de valor único y el índice compuesto, la tendencia a crear un índice compuesto en condiciones de alta concurrencia.
  7. El campo ordenado en la consulta, si se accede al campo ordenado a través del índice, la velocidad de clasificación mejorará enormemente
  8. Estadísticas o campos de agrupación en la consulta (la premisa de la agrupación es ordenar)
Cuando no crear un índice
  1. Hay muy pocos registros en la tabla (el rendimiento de Mysql por encima de los 3 millones comenzará a disminuir)
  2. Agregue, elimine y modifique tablas con frecuencia (aunque se mejora la velocidad de consulta, pero al mismo tiempo reducirá la velocidad de actualización de la tabla, como Insertar, Actualizar, Delele en la tabla, porque al actualizar la tabla, MySQl no solo guarda los datos, pero también guarda los siguientes archivos de índice)
  3. Campos de tabla con datos repetidos y distribuidos uniformemente (como nacionalidad, género, etc., la indexación no tiene sentido)

Si hay 10000 registros en una tabla y la columna del índice de la tabla tiene 9999 valores diferentes, entonces la selectividad de este índice es 9999/10000. Cuanto más cercana sea la selectividad de un índice a 1, mayor será la eficiencia del índice.

Cuellos de botella comunes en Mysql
  1. Cuando la CPU está saturada, generalmente ocurre cuando se cargan datos en la memoria o cuando se leen datos del disco.
  2. E / S: el cuello de botella de E / S del disco se produce cuando los datos cargados son mucho más grandes que la capacidad de la memoria
  3. El cuello de botella del rendimiento del hardware del servidor: superior, gratuito, iostat y vmstat para ver el estado de rendimiento del sistema
Herramienta de análisis de consultas Explicar

Abreviatura: plan de ejecución

Utilice la palabra clave EXPLAIN para simular y optimizar la ejecución de sentencias de consulta SQL, para saber cómo Mysql procesa sentencias SQL, analizar sentencias de consulta o el cuello de botella de rendimiento de la estructura de la tabla.

  1. ¿Qué puede explicar?
    Inserte la descripción de la imagen aquí
  2. Cómo utilizar la
    instrucción Explain + SQLInserte la descripción de la imagen aquí

id: el número de secuencia de la consulta de selección, incluido un conjunto de números, que indica el orden en el que se ejecuta la selección o la tabla de operaciones en la consulta

  • La identificación es la misma, el orden de ejecución es de arriba a abajo
  • El id es diferente, si se trata de una autoconsulta, el número de serie del id aumentará, cuanto mayor sea el valor del id, mayor será la prioridad, antes se ejecutará
  • La misma identificación pero diferente, existe al mismo tiempo


Inserte la descripción de la imagen aquí
El tipo de consulta select_type : se utiliza principalmente para distinguir entre consulta ordinaria, consulta conjunta, autoconsulta, consulta anidada

  • simple: consulta de selección simple, la consulta no contiene autoconsulta ni UNION
  • PRIMARIO: si la consulta contiene subpartes complejas, la consulta más externa se marca como PRIMARIO
  • SUBQUERY: Las subconsultas se incluyen en la lista de selección o dónde
  • DERUIVED: tabla temporal derivada
  • UNIÓN: Si la segunda selección aparece después de la unión, se marcará como unión
  • UNION RESULT: SELECT para obtener el resultado de la tabla UNION


La fila de datos de la tabla es sobre esa tabla

Tipo de
disposición de tipo de acceso Los más
Inserte la descripción de la imagen aquí
comunes son:
de mejor a peor, en orden: sistema> const> eq_ref> ref> rango> índice> TODOS

En general, es necesario asegurarse de que la consulta alcance al menos el nivel de rango, preferiblemente ref.

  • system: Solo hay una fila de registros en la tabla, lo que equivale a una tabla de sistema. Este es un caso especial del tipo const. No suele aparecer y se puede ignorar.
  • const: Significa que se puede encontrar una vez a través del índice. const se usa para comparar la clave principal o el índice único. Debido a que solo una fila de datos coincide, es muy rápido. Si la clave principal se coloca en el lugar lista, Mysql puede convertir la consulta en una constante
  • eq_ref: escaneo de índice único, para cada clave de índice, solo hay un registro en la tabla que coincide con él, lo que a menudo es común en los escaneos de índice de clave principal o único
  • ref: escaneo de índice no único, que devuelve todas las filas que coinciden con un solo valor, es esencialmente un acceso de índice, devuelve todas las que coinciden con una sola fila, sin embargo, puede encontrar múltiples filas de condiciones compuestas, por lo que debería pertenecer a una mezcla de búsqueda y escanear
  • Rango: solo recupere filas en un rango dado, delimitando un rango y sin buscar una por una
    Inserte la descripción de la imagen aquí
    Índice: escaneo de índice completo Inserte la descripción de la imagen aquí
    TODOS: escaneo de tabla completa, escaneo de tabla completa nuevamente (para datos de un millón o decenas de millones de niveles, todos La declaración de consulta del escaneo de la tabla debe optimizarse)

possible_keys
para determinar si se usa el índice, si el índice no es válido, qué índice usa mysql en el caso de competencia de índices múltiples

Muestra los índices que se pueden aplicar a esta tabla, uno o más

El índice realmente utilizado por las claves. Si es NULL, el índice no se utiliza
. Si se utiliza un índice de cobertura en la consulta, el índice solo aparece en la lista de claves. La
Inserte la descripción de la imagen aquí
figura anterior muestra que no hay índice en teoría, y en realidad no se utiliza ningún índice. Puede deberse a que el índice no se crea o el índice creado no se utiliza

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

La figura anterior muestra que el índice no debe usarse en teoría, pero el índice
se usa realmente. Esto se debe a que el índice de cobertura se usa en la consulta, por lo que el índice solo aparece en la lista de claves

key_len
Inserte la descripción de la imagen aquí

ref muestra qué columna del índice se usa, si es posible, es una constante, qué columna es constante o se usa para encontrar el valor en la columna indexada.
Inserte la descripción de la imagen aquí
filas De acuerdo con las estadísticas de la tabla y la selección de índices, se estima aproximadamente para encontrar los registros requeridos y el número de filas que deben leerse
es lo más pequeño posible.

Extra (extra; extendido)
contiene otra información que no es adecuada para mostrarse en otras columnas, pero es muy importante

Atributos:

  1. Usando filesort : (nueve muertes y toda una vida) Significa que MySQL usará un índice externo para ordenar los datos, en lugar de leerlos de acuerdo con el orden del índice en la tabla. La operación de ordenación que no puede ser completada por el índice en Mysql se convierte en "clasificación de archivos" (debe optimizarse lo antes posible)
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
    La razón para usar filesort es porque el índice conjunto es col1, col2, col3, pero la primera vez porque col2 no se usa en la clasificación, el índice está desconectado y el uso de filesort aparece.

2. El uso de temporal (diez muertos sin vida)
usa una tabla temporal para guardar los resultados intermedios. Mysql usa una tabla temporal al ordenar los resultados de la consulta, lo cual es común en el orden de clasificación y agrupación del grupo de consulta por
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Se puede ver que para la instrucción GROUP BY, o no se usa ningún índice, si se usa un índice, debe ser consistente con el orden y número de índices. De lo contrario, se generarán tablas temporales, lo que aumentará seriamente la carga de la base de datos.

USANDO índice (este es un buen fenómeno)
indica que el índice de cobertura se usa en la operación de selección correspondiente para evitar acceder a las filas de datos de la tabla, y la eficiencia es buena.
Si usa where aparece al mismo tiempo, indica que el índice se usa para buscar valores de clave de índice;
si usa where no aparece

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Es decir, si el rango del campo que desea encontrar es menor o igual que el rango del índice, puede usar el índice de cobertura, pero debido a que la selección * está escrita para que el rango sea mayor que el rango del índice, el No se puede utilizar el índice de cobertura, lo que reduce la eficiencia de la consulta.

Supongo que te gusta

Origin blog.csdn.net/weixin_43941676/article/details/113880238
Recomendado
Clasificación