[Mysql] Optimización del rendimiento de Mysql

explicar los parámetros del plan de ejecución en detalle

mysql> explain select * from kt_course order by create_time desc;
+----+-------------+-----------+------+---------------+------+---------+------+------+----------------+
| id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows | Extra          |
+----+-------------+-----------+------+---------------+------+---------+------+------+----------------+
|  1 | SIMPLE      | kt_course | ALL  | NULL          | NULL | NULL    | NULL |   29 | Using filesort |
+----+-------------+-----------+------+---------------+------+---------+------+------+----------------+
1 row in set

seleccione tipo

1) SIMPLE: SELECCIÓN simple, no práctica UNION o subconsulta.
2) PRIMARIO: el SELECCIONO más externo.
3) UNION: La segunda capa usa UNION después de SELECT.
4) UNION DEPENDIENTE: El segundo SELECT en la declaración UNION depende de la subconsulta externa.
5) RESULTADO DE LA UNIÓN: El resultado de la UNIÓN.
6) SUBQUERÍA: El primer SELECCIONAR en la subconsulta.
7) SUBQUERÍA DEPENDIENTE: El primer SELECCIONAR en la subconsulta depende de la consulta externa.
8) DERIVADO: SELECCIONE de la tabla exportada (subconsulta de la cláusula FROM)

mesa

Mostrar de qué tabla se trata la información en esta fila

tipo

typeEl campo es más importante, identifica si la consulta es eficiente, si se usa 全表扫描o 索引扫描espera

Esta es una columna importante que muestra qué tipo de conexión se utiliza.
Tipos de conexión de mejor a peor: const, eq_reg, ref, range, index y ALL

Tipo: díganos el método de acceso utilizado para la tabla, incluidos principalmente los siguientes tipos centralizados.

1) todos: escaneo completo de la tabla.
2) const: lectura constante, a lo sumo solo habrá una coincidencia de registros, porque es una constante, de hecho solo necesita leer una vez.
3) eq_ref: Habrá como máximo un resultado coincidente, al que generalmente se accede a través de la clave primaria o el índice de clave única.
4) texto completo: búsqueda de índice de texto completo.
5) índice: exploración de índice completa.
6) index_merge: use dos (o más) índices en la consulta al mismo tiempo, luego combine los resultados del índice (merge) y luego lea los datos de la tabla.
7) index_subquery: la combinación de campo de resultado devuelto en la subconsulta es un índice (o combinación de índice), pero no una clave primaria o índice único.
8) sonó: Escaneo de rango de índice.
9) ref: La consulta a la que hace referencia el índice de la tabla controlada en la instrucción Join.
10) ref_or_null: la única diferencia de ref es la consulta que agrega un valor vacío además de la consulta a la que hace referencia el índice.
11) sistema: tabla del sistema, solo hay una fila de datos en la tabla;
12) subconsulta única: la combinación del campo de resultado devuelto en la subconsulta es la clave principal o la restricción única.

posibles_claves

Muestra los índices que se pueden aplicar en esta tabla. Si está vacío, no hay índice posible. Puede seleccionar una declaración adecuada de la declaración WHERE para el dominio relevante

llave

El índice real utilizado. Si es NULL, no se usa índice. En casos raros, MYSQL elegirá un índice poco optimizado. En este caso, puede usar USE INDEX (indexname) en la instrucción SELECT para forzar un índice o usar IGNORE INDEX (indexname) para forzar a MYSQL a ignorar el índice

key_len

La longitud del índice utilizado. Sin perder precisión, cuanto más corta sea la longitud, mejor

Método de cálculo key_len  https://www.cnblogs.com/gomysql/p/4004244.html

árbitro

Mostrar qué columna del índice se utilizó, si es posible, una constante

filas

El optimizador de consultas mysql estima la cantidad de filas de datos que SQL debe escanear y leer para encontrar el conjunto de resultados basado en información estadística. Este valor puede reflejar intuitivamente la eficiencia de SQL.

Extra

Información adicional sobre cómo MYSQL analiza las consultas. Se discutirá en la Tabla 4.3, pero los malos ejemplos que puede ver aquí son Uso temporal y Uso de clasificación de archivos, lo que significa que MYSQL no puede usar índices en absoluto, y el resultado es que la recuperación será lenta

Explicación de campo adicional

Extra: información adicional detallada sobre cada paso de la consulta, principalmente lo siguiente.

Distintivo: Encuentre el valor distintivo. Cuando mysql encuentre el primer resultado coincidente, detendrá la consulta de este valor y luego cambiará a otros valores.

Exploración completa en clave NULL: un método de optimización en subconsultas, principalmente en el uso de valores nulos a los que el índice no puede acceder.

Rango verificado para cada registro (mapa de índice: N): de acuerdo con la descripción del manual oficial de MySQL, cuando MySQL Query Optimizer no encuentra un buen índice que se pueda usar, si se conocen los valores de columna de la tabla anterior, se pueden usar algunos índices. Para cada combinación de filas en la tabla anterior, MySQL verifica si el método de acceso range o index_merge se puede usar para solicitar la fila.

SELECCIONAR tablas optimizadas: cuando usamos ciertas funciones de agregación para acceder a un campo que tiene un índice, MySQL Query Optimizer localizará directamente las filas de datos requeridas de una vez a través del índice para completar la consulta completa. Por supuesto, la premisa es que no puede haber una operación GROUP BY en Query. Cuando se usa MIN () o MAX ().

Uso de ordenar archivos: cuando la operación ORDER BY se incluye en Query, y el índice no se puede usar para completar la operación de clasificación, MySQL Query Optimizer tiene que elegir el algoritmo de clasificación correspondiente para lograrlo.

Uso del índice: los datos requeridos se pueden obtener solo en el índice, no es necesario ir a la tabla para obtener los datos.

Uso del índice para agrupar: el acceso a los datos es el mismo que para Usar el índice, los datos requeridos solo necesitan leer el índice, cuando se usa la cláusula GROUP BY o DISTINCT en Consulta, si el campo de agrupación también está en el índice, la información en Extra será Usando el índice para group-by.

Uso temporal: cuando MySQL debe usar tablas temporales en ciertas operaciones, Usar temporal aparece en la Información adicional. Principalmente común en operaciones como GROUP BY y ORDER BY.

Uso de where: si no lee todos los datos de la tabla, o puede obtener todos los datos requeridos simplemente indexando, aparecerá la información de Where.

Uso de where con condición push: este es un mensaje que solo aparece en el motor de almacenamiento NDBCluster, y también debe activarse habilitando la función de optimización de Pushdown de condición antes de que pueda usarse. El parámetro de control es engine_condition_pushdown.

Imposible DONDE se notó después de leer las tablas constantes: MySQL Query Optimizer considera que puede no haber resultado a través de la información estadística recopilada.

Sin tablas: utilice FROM DUAL en la instrucción de consulta o no incluya ninguna cláusula FROM.

No existe: en algunas combinaciones izquierdas, MySQL Query Optimizer optimiza el método utilizado al cambiar la composición de la consulta original, lo que puede reducir parcialmente el número de accesos a datos.

unirse a la optimización

Requisitos: Estadísticas de los mismos datos orgid en la tabla org_knowledge_department_active_week (16.64 millones) y org_knowledge_department_study_month (2.8 millones).

org_knowledge_department_active_week estructura de información

org_knowledge_department_study_month estructura información

 

EXPLAIN
SELECT
  *
FROM
  org_knowledge_department_active_week t1
  STRAIGHT_JOIN org_knowledge_department_study_month t2
    ON t1.orgid = t2.orgid

Este proceso de ejecución de sentencias SQL:

  1. Leer una fila de datos R de la tabla t1
  2. Tome el campo orgid de los datos R y búsquelo en la tabla t2
  3. Saque los datos que cumplan las condiciones de la tabla t2 y forme una fila con R como parte del conjunto de resultados
  4. Repita los pasos 1 a 3 hasta el final de la tabla t1.

Este algoritmo es Índice de unión de bucle anidado (NLJ): búsqueda anidada y utiliza el índice de la tabla controlada.

tabla t1

tabla t2

 

algoritmo de unión:

Índice de unión de bucle anidado (NLJ):

 

Bloquear unión de bucle anidado (INL):

 

Conclusión

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Publicado 61 artículos originales · ganado elogios 2 · Vistas 7303

Supongo que te gusta

Origin blog.csdn.net/hebaojing/article/details/103192776
Recomendado
Clasificación