(Wyjaśnienie utraty ORDER BYs
)
Standard SQL zasadniczo mówi, że podzapytanie jest nieuporządkowanym zestawem wierszy. Oznacza to, że Optymalizator może zignorować ORDER BYs
w tabeli „pochodnej”:FROM ( SELECT ... ORDER BY )
. W „najnowszych” wersjach MySQL i MariaDB, takie jak ORDER BYs
są odrzucane. Istnieją inne przypadki, w których ORDER BYs
jest ignorowany.
W niektórych sytuacje (nie jestem pewien co do tego), dodając LIMIT 99999999
(duża liczba) po ORDER BYs
nakłania Optymalizatora do wykonania ORDER BYs
. Jednak nadal można zignorować „zamówienie” później.
Ogólna zasada dla MySQL:Unikaj podzapytań. (Są przypadki, w których podzapytania są szybsze, ale nie Twoje).
Silna zasada:musisz mieć ORDER BYs
na zewnętrznej stronie, jeśli chcesz, aby wyniki były sortowane.
Jeśli dodałeś LIMIT 3
do tabeli pochodnej w pierwszym zapytaniu otrzymasz tylko CHARLES, DAVID, JAMES, ale niekoniecznie w tej kolejności . Oznacza to, że potrzebujesz dwóch ORDER BYs
- jeden w tabeli pochodnej, jeden na samym końcu.