sql >> Databasteknik >  >> RDS >> Mysql

MySQL-Prestanda vid beställning på beräknad kolumn

Du kan faktiskt inte optimera den frågan.

Du sorterar resultatet med ett beräknat värde, så du kan inte använda ett index. Om du använder explain du kan se hur din fråga exekveras och using temporary kommer att finnas i extra kolumn, vilket innebär att all data från din fråga lagras i en temporär tabell där beställningen utförs.

Det spelar ingen roll om du bara vill ha de första 50 matchningarna i frågan, den måste först hämta all data, dumpa den i en tillfällig tabell, sortera resultatet i den tabellen och sedan returnera de första 50 matchningarna till dig.

Som du kan ana är detta en tids- och minneskrävande operation.

Så det bästa alternativet är att placera ett index i tabellen för att få alla rader du behöver så snabbt du kan och sedan bearbeta dem med php för att få den information du behöver.

Förresten, ta en titt på MySQL-optimeringsguide .



  1. Hur ändrar jag kolumns standardvärde i PostgreSQL?

  2. Ersätt NOT IN med LEFT JOIN i SQL-satsen

  3. Hash vad? Förstå Hash Index

  4. Hur kör jag PHP som är lagrad i en MySQL-databas?