sql >> Database teknologi >  >> RDS >> Mysql

mysql:hvordan gemmer man ORDER BY efter LEFT JOIN uden genbestilling?

(Forklarer tabet af ORDER BY )

SQL-standarden siger i bund og grund, at en underforespørgsel er et uordnet sæt rækker. Dette indebærer, at optimeringsværktøjet frit kan ignorere ORDER BY i tabellen 'afledt':FROM ( SELECT ... ORDER BY ) . I "nylige" versioner af MySQL og MariaDB, sådanne ORDER BYs bliver droppet. Der er andre tilfælde, hvor ORDER BY ignoreres.

I nogle situationer (ikke sikker på denne), tilføjer en LIMIT 99999999 (stort tal) efter ORDER BY narre Optimizer til at udføre ORDER BY . Det er dog stadig gratis at ignorere "ordren" senere.

En generel regel for MySQL:Undgå underforespørgsler. (Der er tilfælde, hvor underforespørgsler er hurtigere, men ikke dine.)

En stærk regel:Du skal har en ORDER BY på den yderste, hvis du ønsker, at resultaterne skal sorteres.

Hvis du havde tilføjet LIMIT 3 til den afledte tabel i din første forespørgsel, vil du kun få CHARLES, DAVID, JAMES, men ikke nødvendigvis i den rækkefølge . Det vil sige, du skal bruge to ORDER BYs - en i den afledte tabel, en til allersidst.



  1. Laravel:opret forbindelse til databaser dynamisk

  2. Spring Data JPA Auditing fungerer ikke for JpaRepository-opdateringsmetoden med @Modifying annotation, hvorfor?

  3. Hvordan virker 'in'-klausulen i oracle

  4. Hvordan kan jeg konvertere denne SQL-sætning til Django QuerySet?