Optimisation de la récupération de la dernière ligne dans les requêtes de groupe MySQL
Dans MySQL, la récupération de la dernière ligne de chaque groupe d'un ensemble de données groupées nécessite un approche efficace. Une stratégie courante est la méthode de sous-requête corrélée :
select * from foo as a where a.id = (select max(id) from foo where uid = a.uid group by uid) group by uid;
Bien que cette méthode fonctionne, elle peut être coûteuse en termes de calcul. Une alternative plus efficace consiste à utiliser une jointure avec une sous-requête, comme démontré dans la requête suivante :
SELECT t1.* FROM foo t1 JOIN (SELECT uid, MAX(id) id FROM foo GROUP BY uid) t2 ON t1.id = t2.id AND t1.uid = t2.uid;
Cette approche optimise les performances en pré-calculant l'ID maximum pour chaque groupe de la sous-requête. En joignant cette valeur pré-calculée, la requête peut récupérer efficacement la dernière ligne de chaque groupe.
De plus, l'utilisation d'EXPLAIN sur les deux requêtes fournirait des informations précieuses sur le plan d'exécution et la consommation des ressources, permettant une optimisation plus poussée. . Une autre alternative consiste à utiliser la méthode LEFT JOIN :
SELECT t1.* FROM foo t1 LEFT JOIN foo t2 ON t1.id < t2.id AND t1.uid = t2.uid WHERE t2.id is NULL;
Cette requête identifie la dernière ligne de chaque groupe en joignant à gauche les lignes suivantes et en filtrant celles dont les valeurs d'ID sont non nulles. En fin de compte, le choix de l'approche d'optimisation dépend des exigences spécifiques en matière de données et de performances de l'application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!