sql >> Base de Datos >  >> RDS >> Mysql

Orden de ejecución de consulta/cláusula de MySQL

La ejecución real de las declaraciones de MySQL es un poco complicada. Sin embargo, el estándar especifica el orden de interpretación de los elementos en la consulta. Esto es básicamente en el orden que especificas, aunque creo que HAVING y GROUP BY podría venir después de SELECT :

  • FROM cláusula
  • WHERE cláusula
  • SELECT cláusula
  • GROUP BY cláusula
  • HAVING cláusula
  • ORDER BY cláusula

Esto es importante para comprender cómo se analizan las consultas. No puede usar un alias de columna definido en un SELECT en el WHERE cláusula, por ejemplo, porque WHERE se analiza antes de SELECT . Por otro lado, dicho alias puede estar en el ORDER BY cláusula.

En cuanto a la ejecución real, eso realmente se deja en manos del optimizador. Por ejemplo:

. . .
GROUP BY a, b, c
ORDER BY NULL

y

. . .
GROUP BY a, b, c
ORDER BY a, b, c

ambos tienen el efecto de ORDER BY no se ejecuta en absoluto, y por lo tanto no se ejecuta después de GROUP BY (en el primer caso, el efecto es eliminar la clasificación del GROUP BY y en el segundo el efecto es no hacer nada más que el GROUP BY ya lo hace).