Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta de desempenho do MySQL


Você pensaria que essa consulta só executa a subconsulta uma vez, mantém o resultado e o compara com as linhas da consulta externa. Mas esse não é o caso do MySQL. O MySQL tem uma lacuna na inteligência de seu otimizador, então ele trata a subconsulta como uma subconsulta dependente e o executa novamente para cada valor distinto da consulta externa.

Para corrigir isso, mova a subconsulta para a cláusula FROM como uma tabela derivada. Ele executará a subconsulta uma vez e manterá o resultado como uma tabela temporária interna. Em seguida, junte-se à outra instância da tabela.
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`);

Além disso, você deve ter um índice em Cidade nas duas colunas (CountryCode,Population) nessa ordem, para que a consulta GROUP BY possa ser executada com eficiência.