Du kan faktisk ikke optimere den forespørgsel.
Du sorterer resultatet ved hjælp af en beregnet værdi, så du kan ikke bruge et indeks. Hvis du bruger explain
du kunne se, hvordan din forespørgsel bliver udført og using temporary
vil være til stede i extra
kolonne, hvilket betyder, at alle data fra din forespørgsel bliver gemt på en midlertidig tabel, hvori bestillingen udføres.
Det er lige meget, om du kun vil have de første 50 matches i forespørgslen, den skal først hente alle data, dumpe dem i en midlertidig tabel, sortere resultatet i den tabel og derefter returnere de første 50 matches til dig.
Som du kan antage, er dette en tids- og hukommelseskrævende operation.
Så din bedste mulighed er at placere et indeks i tabellen for at få alle de rækker, du har brug for, så hurtigt som du kan og derefter behandle dem med php
for at få de data, du har brug for.
Se i øvrigt MySQL-optimeringsvejledning .