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

Mysql præstationsforespørgsel

Du skulle tro, at denne forespørgsel kun udfører underforespørgslen én gang, beholder resultatet og sammenligner det derefter med rækker i den ydre forespørgsel. Men det er ikke tilfældet med MySQL. MySQL har et hul i sin optimizers intelligens, så den behandler underforespørgslen som en afhængig underforespørgsel og genudfører den for hver enkelt værdi af den ydre forespørgsel.

For at rette dette skal du flytte underforespørgslen ind i FROM-sætningen som en afledt tabel. Det vil udføre underforespørgslen én gang og beholde resultatet som en intern midlertidig tabel. Deltag derefter i den anden forekomst af tabellen.

SELECT `ID`, `CountryCode`, `Name`, `District`, `Population`
FROM `City`
JOIN (
    SELECT `CountryCode`, MAX(`Population`) AS `Population`
    FROM `City`
    GROUP BY `CountryCode`
) AS _max USING (`CountryCode`, `Population`);

Du bør også have et indeks på By over de to kolonner (CountryCode,Population) i den rækkefølge, så GROUP BY-forespørgslen kan køre effektivt.




  1. QueryException SQLSTATE[HY000] [1045] Adgang nægtet for brugeren 'homestead'@'localhost' (ved hjælp af adgangskode:JA)

  2. SQL giver en syntaksfejl, men jeg kan ikke se en

  3. Erstatning for MySQL's variabler i PostgreSQL?

  4. Hent, hvor lang tid det tager at etablere en forbindelse med PHP mysqli_real_connect()