(Uitleg over het verlies van ORDER BY
)
De SQL-standaard zegt in wezen dat een subquery een ongeordende reeks rijen is. Dit houdt in dat de Optimizer vrij is om de ORDER BY
. te negeren in de 'afgeleide' tabel:FROM ( SELECT ... ORDER BY )
. In "recente" versies van MySQL en MariaDB, zoals ORDER BYs
worden gedropt. Er zijn andere gevallen waarin ORDER BY
wordt genegeerd.
In sommige situaties (niet zeker over deze), het toevoegen van een LIMIT 99999999
(groot getal) na de ORDER BY
bedriegt de Optimizer om de ORDER BY
. uit te voeren . Het is echter nog steeds vrij om de "bestelling" later te negeren.
Een algemene regel voor MySQL:Vermijd subquery's. (Er zijn gevallen waarin subquery's sneller zijn, maar niet die van u.)
Een sterke regel:je moet hebben een ORDER BY
op de buitenste als u wilt dat de resultaten worden gesorteerd.
Als u LIMIT 3
. had toegevoegd naar de afgeleide tabel in uw eerste zoekopdracht, zou u alleen CHARLES, DAVID, JAMES, maar niet noodzakelijk in die volgorde krijgen . Dat wil zeggen, je hebt twee ORDER BYs
. nodig - één in de afgeleide tabel, één helemaal aan het einde.