(Förklarar förlusten av ORDER BY
)
SQL-standarden säger i huvudsak att en underfråga är en oordnad uppsättning rader. Detta innebär att optimeraren är fri att ignorera ORDER BY
i tabellen 'derived':FROM ( SELECT ... ORDER BY )
. I "senaste" versioner av MySQL och MariaDB, sådana ORDER BYs
läggs ner. Det finns andra fall där ORDER BY
ignoreras.
I vissa situationer (osäker på den här), lägga till en LIMIT 99999999
(stort nummer) efter ORDER BY
lurar Optimizern att göra ORDER BY
. Det är dock fortfarande fritt fram att ignorera "beställningen" senare.
En allmän regel för MySQL:Undvik underfrågor. (Det finns fall där underfrågor är snabbare, men inte dina.)
En stark regel:Du måste har en ORDER BY
på den yttersta om du vill att resultaten ska sorteras.
Om du hade lagt till LIMIT 3
till den härledda tabellen i din första fråga skulle du bara få CHARLES, DAVID, JAMES, men inte nödvändigtvis i den ordningen . Det vill säga, du skulle behöva två ORDER BYs
- en i den härledda tabellen, en i slutet.