sql >> Database teknologi >  >> RDS >> Mysql

MySQL-Performance ved bestilling på beregnet kolonne

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 .



  1. Kan jeg betinget håndhæve en unikhedsbegrænsning?

  2. Er det muligt at få adgang til en .mdf-database uden SQL Server?

  3. dårlig Hibernate vælg ydeevne sammenlignet med at køre direkte - hvordan fejlfindes?

  4. Sådan indsætter du i MySQL ved hjælp af en forberedt erklæring med PHP