sql >> Databasteknik >  >> RDS >> Mysql

Mysql Performance Query

Du skulle kunna tro att den här frågan bara kör underfrågan en gång, behåller resultatet och sedan jämför den med rader i den yttre frågan. Men så är det inte med MySQL. MySQL har en lucka i sin optimerares intelligens, så den behandlar underfrågan som en beroende underfråga och kör den igen för varje distinkt värde i den yttre frågan.

För att åtgärda detta, flytta underfrågan till FROM-satsen som en härledd tabell. Den kommer att köra underfrågan en gång och behålla resultatet som en intern temporär tabell. Gå sedan med i den andra instansen av 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 också ha ett index på Stad över de två kolumnerna (CountryCode,Population) i den ordningen, så att GROUP BY-frågan kan köras effektivt.




  1. Entity framework mycket långsam att ladda för första gången efter varje kompilering

  2. Automatisk datainsamling av databasschemaändringar i MS SQL Server

  3. MySQL-val baserat på dagligt tidsstämpelintervall

  4. kan inte ansluta till MySQL-databas med extern ip-adress