Compartir tecnología

Explicación detallada de la declaración de explicación de Mysql y visualización de ejemplo

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Primero, presente brevemente sql:

El lenguaje SQL se divide en cuatro categorías: lenguaje de consulta de datos DQL, lenguaje de manipulación de datos DML, lenguaje de definición de datos DDL y lenguaje de control de datos DCL.

1. Lenguaje de consulta de datos DQL
La estructura básica del lenguaje de consulta de datos DQL es un bloque de consulta compuesto por la cláusula SELECT, la cláusula FROM y la cláusula WHERE: SELECT <tabla de nombres de campo> FROM <nombre de tabla o vista> WHERE <condiciones de consulta>

2. Lenguaje de manipulación de datos DML
Hay tres formas principales de lenguaje de manipulación de datos DML:
1) Insertar: INSERTAR
2) Actualización: ACTUALIZAR
3) Eliminar: ELIMINAR

3. Lenguaje de definición de datos DDL
El lenguaje de definición de datos DDL se utiliza para crear varios objetos en la base de datos ----- tablas, vistas, índices, sinónimos, clústeres, etc., como: CREATE TABLE / VIEW / INDEX / SYN / CLUSTER Clúster de sinónimos de índice de vista de tabla | . ¡Las operaciones DDL se envían implícitamente! No se puede revertir

4. Lenguaje de control de datos DCL
El lenguaje de control de datos DCL se utiliza para otorgar o revocar ciertos privilegios para acceder a la base de datos, controlar el tiempo y el efecto de las transacciones de manipulación de la base de datos y monitorear la base de datos. como:
1) CONCESIÓN: Autorización.
2) RETROCEDER [TRABAJO] A [PUNTO DE GUARDAR]: retrocede hasta un punto determinado. Rollback---ROLLBACK El comando rollback devuelve el estado de la base de datos al último estado enviado. Su formato es: SQL>ROLLBACK;
3) COMPROMETER [TRABAJO]: Enviar. Durante las operaciones de inserción, eliminación y modificación de la base de datos, la transacción se completa solo cuando se envía a la base de datos. Antes de que se confirme la transacción, solo la persona que opera la base de datos tiene derecho a ver lo que se ha hecho. Otros solo pueden verlo después de que se complete la confirmación final.

Acerca de las declaraciones de autorización

Comando de autorización de la base de datos:

OTORGAR<permiso> en el nombre de la tabla (o nombre de la columna) al usuario

Opción de respuesta correcta B: insertar, seleccionar: nombre de la tabla de permisos: usuario usuario: nkw

Permisos de reciclaje de puntos de conocimiento complementarios

REVOCAR <permiso> en el nombre de la tabla (o nombre de la columna) DEL usuario

Explicar la introducción de la declaración.

Creo que todos están familiarizados con la declaración de explicación, que se utiliza como declaración para ver el plan de ejecución. explicar se utiliza a menudo en el análisis de optimización de SQL.

Vale la pena señalar aquí: explicar en realidad no ejecuta la declaración, solo muestra el plan de ejecución.

¿Qué información puedo ver?

  • Orden de lectura de la tabla
  • Tipo de operación de operación de lectura de datos
  • ¿Qué índices se pueden utilizar?
  • ¿Qué índices se utilizan realmente?
  • Referencias entre tablas
  • ¿Cuántas filas de cada tabla consulta el optimizador?

Introducción a la sintaxis básica

  1. EXPLAIN SELECT select具体语句
  2. 如:
  3. EXPLAIN SELECT * FROM userpro

Explicar la función de cada columna.

ListadescribirReponer
identificaciónCada palabra clave SELECT corresponde a una identificación

seleccione tipo

Tipo de consulta correspondiente a la palabra clave SELECT
mesaNombre de la tabla
particionesInformación de partición coincidente
tipoMétodo de acceso para una sola mesa.
posibles_clavesPosibles índices
llaveíndice real utilizado
clave_lenLa longitud del índice real utilizada
árbitroCuando se utiliza la consulta de equivalencia de la columna de índice, la información del objeto que coincide con la columna de índice para la equivalencia.
filasNúmero estimado de registros a leer
filtradoPorcentaje de registros restantes después de filtrar por criterios de búsqueda

    

Extra

información extra

               

Introducción detallada a cada columna de EXPLAIN

1, identificación

Cada palabra clave SELECT corresponde a una identificación

Cuanto mayor sea el valor de identificación, mayor será la prioridad y se ejecutará primero.

Si los ID son iguales, pueden considerarse como un grupo y ejecutarse secuencialmente de arriba a abajo.

Cada número de identificación representa una consulta independiente. Cuanto menor sea el número de consultas en una declaración SQL, mejor.

2, seleccione_tipo

categoríailustrar
SIMPLEConsulta de tabla única, sin subconsulta ni consulta UNION.
PRIMARIOLa declaración SELECT más externa de la consulta.
SUBCONSULTASe utiliza una subconsulta en la cláusula WHERE.
DERIVADOPara las subconsultas contenidas en la cláusula FROM, MySQL la marcará como DERIVADA (derivada) y generará una tabla temporal para su conjunto de resultados para que la utilice la consulta externa.
UNIÓNLa segunda declaración de consulta y las siguientes en una consulta UNION.
RESULTADO DE LA UNIÓNEl conjunto de resultados de una consulta UNION.
SUBCONSULTA DEPENDIENTEEl resultado de la subconsulta depende del valor de la consulta externa y la subconsulta se ejecuta una vez por cada fila de la consulta externa.
UNIÓN DEPENDIENTELa segunda declaración de consulta y las posteriores de una consulta UNION, y los resultados dependen del valor de la consulta externa.
SUBCONSULTA NO ALMACENABLE EN CACHÉLa subconsulta no se puede almacenar en caché y se ejecutará cada vez que se haga referencia a ella.

3. La columna de la tabla representa el nombre de la tabla (a veces no es el nombre real de la tabla, puede ser la abreviatura).

4. particiones (opcional)

5. tipo ☆

Los tipos comunes son los siguientes

tipoilustrar
sistemaSólo hay una fila en la tabla, normalmente SELECT ... FROM DUAL Optimización de consultas.
constanteLa consulta se encuentra a través del índice una vez, con solo una fila de resultados (tabla constante).
referencia_ecualUtilice un índice único o una clave principal para buscar una fila de otra tabla.
árbitroUtilice un índice no único para buscar una o más filas de otra tabla.
rangoDevuelve un rango de filas usando un índice.
índiceEscanea completamente el índice para buscar filas en lugar de escanear toda la tabla.
todoUn escaneo completo de la tabla verifica cada fila de la tabla.

En general, trate de evitar todo

6, clave y posibles_claves

  1. llave

    • key El campo muestra el índice real utilizado por la consulta.Si el valor de este campo esNULL , lo que indica que no se utiliza ningún índice. Si este campo tiene un valor, significa que MySQL usó el índice especificado para ejecutar la consulta.
  2. posibles_claves

    • possible_keys El campo muestra la lista de índices que MySQL puede usar. Estos índices son índices que se pueden considerar en las consultas, pero que en realidad no se pueden utilizar. generalmente,possible_keys Los índices enumerados en se determinan en función de las condiciones de consulta y la estructura de la tabla.
  • si key Un campo tiene un nombre de índice ypossible_keys Se enumeran varios nombres de índice, lo que indica que MySQL ha seleccionadokey El índice en el que aparece el campo se utiliza para realizar la consulta, mientras que los otros índices se enumeran enpossible_keys Medium dijo que también podría considerarse, pero finalmente no usarse.

  • si key Los campos sonNULL,y possible_keys Se enumeran varios nombres de índice, lo que indica que MySQL no utiliza ningún índice al ejecutar la consulta, lo que puede resultar en un escaneo completo de la tabla u otros métodos de acceso optimizados sin índice.

7, longitud de la tecla

key_len Es un campo que describe la longitud de la clave de índice. Indica el uso del índice y la longitud de la clave del índice cuando MySQL usa un índice específico para ejecutar consultas.

  1. Índice de una sola columna

    • Si se utiliza un índice de una sola columna y el tipo de columna tiene una longitud fija (p. ej. INT),pero key_len El valor es la longitud de la columna.
    • Si se utilizan campos de longitud variable (p. ej. VARCHAR),pero key_len El valor de es la longitud máxima del campo.
  2. índice compuesto

    • Para índices compuestos (es decir, índices que contienen varias columnas),key_len Representa la longitud total de todas las columnas del índice.
  3. índice combinado

    • Si se utiliza un índice combinado en varias columnas en la consulta,key_len es la longitud total de todas las columnas del índice combinado.
  4. prefijo de índice

    • En algunos casos, MySQL puede utilizar sólo una parte del índice. Por ejemplo, puede utilizar el prefijo del índice como parte del índice para ejecutar una consulta. en este caso,key_len Se mostrará la longitud real de la pieza índice utilizada.

8, referencia

ref Es un campo que describe las condiciones de conexión entre tablas o utiliza un índice no único para buscar. Indica qué condiciones de unión o qué índices utiliza MySQL para acceder a la tabla al ejecutar una consulta.

9 filas

rows Es una estimación del número de filas a las que se accede o examina al ejecutar una consulta.

  • por sencillo SELECT Preguntar,rows Representa el número estimado de filas que se devolverán.
  • Para consultas de unión (JOIN) o subconsulta,rows Puede representar el número de filas a las que se accede durante la operación de unión.
  • Para escaneo de tabla (escaneo de tabla completo o escaneo de índice),rows Puede representar el número de filas escaneadas.

10, filtrado

Representa el porcentaje de filas filtradas según las condiciones WHERE y las condiciones del índice. filtrado refleja el efecto de optimización de consultas estimado por el optimizador.

cuando filtered Cuando está cerca del 100%, significa que las condiciones de la consulta han filtrado efectivamente la mayoría de las filas que no cumplen con las condiciones, lo que suele ser un buen indicador de optimización.

Por el contrario, si filtered Un valor bajo puede indicar que las condiciones de la consulta no son lo suficientemente precisas o que el optimizador no está utilizando eficazmente el índice para filtrar los datos.

11, Adicional

Campos de información adicional

Éstos son algunos de los más comunes Extra Campos y sus significados:

  1. Usando índice

    • Indica que la consulta utiliza un índice de cobertura, es decir, los resultados de la consulta se pueden devolver completamente a través del índice sin acceder a las filas de datos reales de la tabla.
  2. Usando donde

    • Indica que el servidor MySQL realizará un filtrado condicional después de que el motor de almacenamiento recupere las filas, en lugar de completarlo en el índice.
  3. Uso temporal

    • Indica que MySQL ha creado una tabla temporal en la memoria para procesar la consulta. Comúnmente utilizado en operaciones de clasificación o consultas que contienen funciones agregadas.
  4. Usando filesort

    • Indica que MySQL realizó la clasificación de archivos para procesar la consulta. Esto suele ocurrir cuando no se puede realizar la clasificación mediante un índice.
  5. Rango comprobado para cada registro (mapa de índice: ...)

    • Indica que MySQL usa el índice para verificar si cada registro está dentro del rango especificado.Esto suele suceder cuandorange En tipo de consulta.
  6. Escaneo completo de la clave NULL

    • Indica que MySQL realizó un escaneo completo de la tabla en un índice para encontrar filas que coincidan con valores NULL.
  7. Distinto

    • Indica que MySQL dejará de buscar filas duplicadas después de encontrar la primera fila coincidente.
  8. Uso del búfer de unión (bucle anidado en bloques)

    • Indica que MySQL está utilizando el búfer de conexión para manejar la operación de conexión. Esto generalmente ocurre cuando la cantidad de tablas de conexión es grande o el tamaño de la tabla de conexión es grande.
  9. Imposible DONDE

    • Indica que el optimizador de MySQL ha determinado que las condiciones de la cláusula WHERE no se pueden cumplir y, por lo tanto, no se escanearán filas.
  10. No se utilizan tablas

    • Indica que la consulta no involucra ninguna tabla, por ejemplo SELECT NOW()

explicar la visualización de la ejecución real

preparación de datos

Crear tabla s1

  1. CREATE TABLE s1 (
  2. id INT AUTO_INCREMENT,
  3. key1 VARCHAR(100),
  4. key2 INT,
  5. key3 VARCHAR(100),
  6. key_part1 VARCHAR(100),
  7. key_part2 VARCHAR(100),
  8. key_part3 VARCHAR(100),
  9. common_field VARCHAR(100),
  10. PRIMARY KEY (id),
  11. INDEX idx_key1 (key1),
  12. UNIQUE INDEX idx_key2 (key2),
  13. INDEX idx_key3 (key3),
  14. INDEX idx_key_part(key_part1, key_part2, key_part3)
  15. ) ENGINE=INNODB CHARSET=utf8;

Crear tabla s2

  1. CREATE TABLE s2 (
  2. id INT AUTO_INCREMENT,
  3. key1 VARCHAR(100),
  4. key2 INT,
  5. key3 VARCHAR(100),
  6. key_part1 VARCHAR(100),
  7. key_part2 VARCHAR(100),
  8. key_part3 VARCHAR(100),
  9. common_field VARCHAR(100),
  10. PRIMARY KEY (id),
  11. INDEX idx_key1 (key1),
  12. UNIQUE INDEX idx_key2 (key2),
  13. INDEX idx_key3 (key3),
  14. INDEX idx_key_part(key_part1, key_part2, key_part3)
  15. ) ENGINE=INNODB CHARSET=utf8;

Los datos los prepara usted mismo.

Ejecución de muestras y resultados.

consulta sencilla

Consulta de tabla única

EXPLAIN SELECT * FROM `s1`;

Unirse a la consulta

EXPLAIN SELECT * FROM `s1` INNER JOIN `s2`;

subconsulta

  1. EXPLAIN SELECT * FROM s1 WHERE key1 IN (SELECT key2 FROM s2 WHERE common_field
  2. = 'a');

exhibición especial

mostrar tipo_selección
  1. #Union 去重
  2. EXPLAIN SELECT * FROM `s1` UNION SELECT * FROM `s2`;
  3. #Union 全查
  4. EXPLAIN SELECT * FROM `s1` UNION ALL SELECT * FROM `s2`;

El último paso es la deduplicación, por lo que se utilizará una tabla temporal. Sin embargo, UNION ALL es una consulta para todos y no aparecerá ningún mensaje de consulta de tabla temporal.

tipo de clase

const (busca el índice una vez, solo una fila de resultados)

EXPLAIN SELECT * FROM s1 WHERE id = 10002;

eq_ref (busca una fila de otra tabla usando un índice único o clave principal)

EXPLAIN SELECT * FROM s1 INNER JOIN s2 ON s1.id = s2.id;

ref (use un índice no único para buscar una o más filas de otra tabla)

EXPLAIN SELECT * FROM s1 WHERE key1 = 'a';

rango (devuelve un rango de filas usando el índice)

EXPLAIN SELECT * FROM s1 WHERE key1 IN ('a', 'b', 'c');

índice (escanee completamente el índice para encontrar filas)

EXPLAIN SELECT key_part2 FROM s1 WHERE key_part3 = 'a';

Otras pantallas

tiempo decimal filtrado

EXPLAIN SELECT * FROM s1 WHERE key1 > 'za' AND common_field = 'la'