sql >> Databasteknik >  >> RDS >> Mysql

mysql:hur sparar man ORDER BY efter LEFT JOIN utan att beställa om?

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



  1. Kontrollera om ett objekt inte finns i en annan tabell

  2. Uppdatera en MySQL-tabell med rekordrankningar inom grupper

  3. ORDER_BY datum LIMIT 1

  4. Kartlägg ett PostGIS-geometripunktfält med Hibernate on Spring Boot