sql >> Database >  >> RDS >> Mysql

MySQL-prestaties bij bestellen op berekende kolom

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 .



  1. Database wordt niet verwijderd wanneer de Android-applicatie wordt verwijderd

  2. MySQL Select afgelopen 7 dagen

  3. Dichtstbijzijnde locatie zoeken op postcode?

  4. Hoe om te gaan met fragmentatie van auto_increment ID-kolom in MySQL