Consulta relacionada con MySQL

1. Proceso de ejecución de consulta asociada

        En general, MySQL cree que cualquier consulta es una asociación, y no es solo una consulta que requiere que dos tablas coincidan para llamarse asociación.

Por lo tanto, en mysql, cada consulta, cada fragmento (incluidas las subconsultas o incluso la selección de una sola tabla ) pueden estar relacionadas.

Por lo tanto, es importante entender cómo mysql realiza las consultas asociadas. Veamos primero un ejemplo de unión. Para la unión, mysql primero coloca una serie de resultados de consultas individuales en una tabla temporal.

Luego, vuelva a leer los datos de la tabla temporal para completar la unión.En el concepto de mysql, cada consulta es una asociación, por lo que la tabla temporal del resultado de la lectura también es una asociación.

Primero, el optimizador MySQL debe determinar quién maneja la tabla, es decir, qué tabla se utiliza como punto de referencia. Cuando se trata de tales problemas, el optimizador MySQL utiliza una solución simple y cruda:

Qué tabla tiene un pequeño conjunto de resultados, qué tabla se usa como tabla de conducción, por supuesto, el método de procesamiento real del optimizador MySQL será mucho más complicado

 

Tales como:

mysql encontró una subconsulta en la cláusula from, primero ejecuta la subconsulta y coloca el resultado en una tabla temporal, y luego trata esta tabla temporal como una tabla normal (como su nombre: tabla derivada),

mysql también usa una tabla temporal similar cuando ejecuta consultas de unión. Cuando encuentra una conexión externa derecha, mysql la reescribe como una conexión externa izquierda equivalente. En otras palabras, la versión actual de mysql cambiará todos los tipos de consulta. Cambiar a un plan de ejecución similar,

Sin embargo, no todas las consultas se pueden convertir a la forma anterior, como por ejemplo: la conexión externa completa no se puede completar con bucles anidados y retroceso, por lo que mysql no admite la conexión externa completa.

 

Plan de implementación:

A diferencia de muchas otras bases de datos relacionales , mysql no genera un código de bytes de consulta para ejecutar la consulta, mysql genera un árbol de instrucciones para la consulta,

Luego ejecute el árbol de instrucciones a través del motor de almacenamiento y devuelva el resultado. El plan de ejecución final contiene toda la información de la consulta reconstruida. Por ejemplo , después de ejecutar la explicación extendida en una consulta ,

Luego ejecute mostrar advertencias, puede ver la consulta reconstruida. mysql siempre anida los bucles comenzando desde una tabla y retrocediendo para completar la asociación de todas las tablas. 

Por lo tanto, el plan de ejecución de mysql es un árbol de profundidad primero a la izquierda y luego se remonta al nivel anterior de asociación:

 

Optimizador de consultas relacionadas:

La parte más importante del optimizador mysql es la optimización de consultas asociadas, que determina el orden de la asociación de varias tablas, generalmente cuando hay varias tablas asociadas,

Puede haber muchas órdenes de asociación diferentes para obtener el mismo efecto de ejecución, y el optimizador de consultas de asociación elige la orden de asociación menos costosa al evaluar el costo cuando la orden es diferente.

 

2. Optimización

Sobre straight_join:

Straight_join realiza el orden de carga de varias tablas obligatorias, de izquierda a derecha, como:

... A straight_join B en A.name = B.name

Straight_join es completamente equivalente a la combinación interna, excepto que la sintaxis de combinación se basa en "qué tabla tiene un pequeño conjunto de resultados, qué tabla es la tabla de conducción" para determinar quién carga primero, y straight_join forzará a la tabla de la izquierda a cargar primero.

 

Nota:

En general, STRAIGHT_JOIN solo se aplica a las uniones internas, porque la unión izquierda y la unión derecha ya saben qué tabla se usa como tabla de unidades y qué tabla se usa como tabla controlada.

Por ejemplo, la unión izquierda usa la tabla izquierda como la mesa de conducción, la unión derecha es lo opuesto, y STRAIGHT_JOIN se usa en la conexión interna, y la tabla izquierda se obliga a usarse como la mesa de conducción.

Por lo tanto, esta característica se puede utilizar para algunos ajustes, cambiando a la fuerza el plan de ejecución seleccionado por el optimizador de MySQL.

Pero a menudo, al analizar el rendimiento del procesamiento de mysql, como (Explicar), si encuentra que mysql está en un orden de carga irrazonable, puede usar esta declaración, pero a menudo mysql puede analizarla y manejarla automáticamente.

 

 

Supongo que te gusta

Origin www.cnblogs.com/ZJOE80/p/12714868.html
Recomendado
Clasificación