Eigenlijk kun je die zoekopdracht niet optimaliseren.
U sorteert het resultaat met een berekende waarde, dus u kunt geen index gebruiken. Als u explain
. gebruikt je zou kunnen zien hoe je zoekopdracht wordt uitgevoerd, en using temporary
zal aanwezig zijn in de extra
kolom, wat betekent dat alle gegevens van uw zoekopdracht worden opgeslagen in een tijdelijke tabel waarin de bestelling wordt uitgevoerd.
Het maakt niet uit of u alleen de eerste 50 overeenkomsten in de zoekopdracht wilt, het moet eerst alle gegevens ophalen, deze in een tijdelijke tabel dumpen, het resultaat in die tabel sorteren en dan de eerste 50 overeenkomsten naar u terugsturen.
Zoals u zich kunt voorstellen, is dit een tijdrovende en geheugenverslindende operatie.
Je kunt dus het beste een index in de tabel plaatsen om alle rijen die je nodig hebt zo snel mogelijk te krijgen en ze vervolgens te verwerken met php
om de gegevens te krijgen die u nodig heeft.
Kijk trouwens eens in de MySQL-optimalisatiegids .