Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Auswertungsreihenfolge der Oracle-SQL-Klausel

Die Auswahlliste kann nicht immer zuletzt ausgewertet werden, da ORDER BY Aliase verwenden kann, die in der Auswahlliste definiert sind, sodass sie anschließend ausgeführt werden müssen. Zum Beispiel:

SELECT foo+bar foobar FROM table1 ORDER BY foobar

Ich würde sagen, dass die Reihenfolge der Ausführung im Allgemeinen so aussehen könnte:

  • VON
  • WO
  • GRUPPE NACH
  • AUSWÄHLEN
  • HABEN
  • BESTELLEN VON

Die Klauseln GROUP BY und WHERE könnten ausgetauscht werden, ohne das Ergebnis zu ändern, ebenso wie die Klauseln HAVING und ORDER BY.

In Wirklichkeit sind die Dinge komplexer, da die Datenbank die Ausführung gemäß unterschiedlichen Ausführungsplänen neu anordnen kann. Solange das Ergebnis gleich bleibt, spielt es keine Rolle, in welcher Reihenfolge es ausgeführt wird.

Beachten Sie auch, dass bei Auswahl eines Indexes für die ORDER BY-Klausel die Zeilen möglicherweise bereits in der richtigen Reihenfolge sind, wenn sie von der Festplatte gelesen werden. In diesem Fall wird die ORDER BY-Klausel überhaupt nicht ausgeführt.