sql >> Database >  >> RDS >> Mysql

Mysql-prestatiequery

Je zou denken dat deze query de subquery slechts één keer uitvoert, het resultaat behoudt en het vervolgens vergelijkt met rijen in de buitenste query. Maar dat is niet het geval met MySQL. MySQL heeft een hiaat in de intelligentie van zijn optimalisatieprogramma, dus behandelt het de subquery als een afhankelijke subquery en voert het opnieuw uit voor elke afzonderlijke waarde van de buitenste query.

Om dit op te lossen, verplaatst u de subquery naar de FROM-component als een afgeleide tabel. Het zal de subquery één keer uitvoeren en het resultaat bewaren als een interne tijdelijke tabel. Sluit je dan aan bij de andere instantie van de tabel.

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

U zou ook een index op Stad moeten hebben over de twee kolommen (CountryCode,Population) in die volgorde, zodat de GROUP BY-query efficiënt kan worden uitgevoerd.




  1. Hoe kan ik een foutmelding krijgen bij het uitvoeren van meerdere query's met PDO?

  2. Hoe configureer ik hibernate.cfg.xml naar applicationContext.xml als dataSource?

  3. Relatiekoppelingen maken in PostgreSQL via pgAdmin

  4. Rails 5 Mysql UUID