sql >> Databáze >  >> RDS >> Mysql

Dotaz na výkon Mysql

Mysleli byste si, že tento dotaz provede poddotaz pouze jednou, zachová výsledek a poté jej porovná s řádky ve vnějším dotazu. To ale není případ MySQL. MySQL má mezeru v inteligenci svého optimalizátoru, takže s poddotazem zachází jako se závislým poddotazem a znovu jej provede pro každou odlišnou hodnotu vnějšího dotazu.

Chcete-li tento problém vyřešit, přesuňte poddotaz do klauzule FROM jako odvozenou tabulku. Poddotaz provede jednou a výsledek zachová jako interní dočasnou tabulku. Poté se připojte k jiné instanci tabulky.

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`);

Také byste měli mít index města přes dva sloupce (CountryCode,Population) v tomto pořadí, takže dotaz GROUP BY může běžet efektivně.




  1. Získejte velikost všech databází v PostgreSQL (psql)

  2. načíst data z mysql a poslat je e-mailem

  3. WSO2EMM – Správa aplikací nikdy nevrací seznam uživatelů s nainstalovanou/nenainstalovanou aplikací

  4. Při pokusu o instalaci pg gem nelze najít hlavičku 'libpq-fe.h