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