Mysql
 sql >> Database >  >> RDS >> Mysql

Ordine di esecuzione della query / clausola MySQL

L'esecuzione effettiva delle istruzioni MySQL è un po' complicata. Tuttavia, lo standard specifica l'ordine di interpretazione degli elementi nella query. Questo è fondamentalmente nell'ordine che specifichi, anche se penso che HAVING e GROUP BY potrebbe venire dopo SELECT :

  • FROM clausola
  • WHERE clausola
  • SELECT clausola
  • GROUP BY clausola
  • HAVING clausola
  • ORDER BY clausola

Questo è importante per capire come vengono analizzate le query. Non puoi utilizzare un alias di colonna definito in un SELECT nel WHERE clausola, per esempio, perché WHERE viene analizzato prima di SELECT . D'altra parte, un tale alias può trovarsi in ORDER BY clausola.

Per quanto riguarda l'esecuzione effettiva, questa è davvero lasciata all'ottimizzatore. Ad esempio:

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

e

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

entrambi hanno l'effetto di ORDER BY non viene eseguito affatto -- e quindi non viene eseguito dopo il GROUP BY (nel primo caso, l'effetto è rimuovere l'ordinamento dal GROUP BY e nel secondo l'effetto non è altro che il GROUP BY già lo fa).