sql >> Database >  >> RDS >> Mysql

mysql:hoe kan ik ORDER BY opslaan na LEFT JOIN zonder opnieuw te bestellen?

(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.



  1. Tabel samenvoegen afhankelijk van de waarde van de kolom in de hoofdtabel

  2. Uitvoering van sequenties en series in Postgres-XL

  3. MIN/MAX vs BESTELLEN PER en LIMIT

  4. Wat is de dubbele tabel in Oracle?