(Erklärt den Verlust von ORDER BYs
)
Der SQL-Standard besagt im Wesentlichen, dass eine Unterabfrage eine ungeordnete Menge von Zeilen ist. Dies impliziert, dass der Optimierer den ORDER BYs
ignorieren kann in der 'abgeleiteten' Tabelle:FROM ( SELECT ... ORDER BY )
. In "neueren" Versionen von MySQL und MariaDB sind solche ORDER BYs
werden fallen gelassen. Es gibt andere Fälle, in denen ORDER BYs
wird ignoriert.
In einigen Situationen (bei diesem hier nicht sicher), indem Sie ein LIMIT 99999999
hinzufügen (große Zahl) nach dem ORDER BYs
bringt den Optimierer dazu, ORDER BYs
auszuführen . Es steht jedoch immer noch frei, die "Bestellung" später zu ignorieren.
Eine allgemeine Regel für MySQL:Vermeiden Sie Unterabfragen. (Es gibt Fälle, in denen Unterabfragen schneller sind, aber nicht Ihre.)
Eine strenge Regel:Sie müssen einen ORDER BYs
haben ganz außen, wenn die Ergebnisse sortiert werden sollen.
Wenn Sie LIMIT 3
hinzugefügt haben in der abgeleiteten Tabelle in Ihrer ersten Abfrage erhalten Sie nur CHARLES, DAVID, JAMES, aber nicht unbedingt in dieser Reihenfolge . Das heißt, Sie benötigen zwei ORDER BYs
- eine in der abgeleiteten Tabelle, eine ganz am Ende.