Maison  >  Article  >  base de données  >  Comment récupérer efficacement la dernière ligne de chaque groupe dans les requêtes MySQL Group By ?

Comment récupérer efficacement la dernière ligne de chaque groupe dans les requêtes MySQL Group By ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-14 18:44:02213parcourir

How to Efficiently Fetch the Last Row for Each Group in MySQL Group By Queries?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn