Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie kann ich die letzte Zeile für jede Gruppe in MySQL-Gruppen-nach-Abfragen effizient abrufen?

Patricia Arquette
Freigeben: 2024-11-14 18:44:02
Original
210 Leute haben es durchsucht

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

Optimieren des Abrufens der letzten Zeile in MySQL-Gruppen-nach-Abfragen

In MySQL erfordert das Abrufen der letzten Zeile für jede Gruppe eines gruppierten Datensatzes eine effizienter Ansatz. Eine gängige Strategie ist die korrelierte Unterabfragemethode:

select * 
from foo as a
where a.id = (select max(id) from foo where uid = a.uid group by uid)
group by uid;
Nach dem Login kopieren

Diese Methode funktioniert zwar, kann aber rechenintensiv sein. Eine effizientere Alternative ist die Verwendung eines Joins mit einer Unterabfrage, wie in der folgenden Abfrage gezeigt:

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;
Nach dem Login kopieren

Dieser Ansatz optimiert die Leistung, indem er die maximale ID für jede Gruppe in der Unterabfrage vorab berechnet. Durch die Verknüpfung dieses vorberechneten Werts kann die Abfrage die letzte Zeile für jede Gruppe effizient abrufen.

Darüber hinaus würde die Verwendung von EXPLAIN für beide Abfragen wertvolle Einblicke in den Ausführungsplan und den Ressourcenverbrauch liefern und so eine weitere Optimierung ermöglichen . Eine weitere Alternative ist die Verwendung der LEFT JOIN-Methode:

SELECT t1.* FROM foo t1
LEFT JOIN foo t2
ON t1.id < t2.id AND t1.uid = t2.uid
WHERE t2.id is NULL;
Nach dem Login kopieren

Diese Abfrage identifiziert die letzte Zeile für jede Gruppe, indem sie die nachfolgenden Zeilen links verknüpft und diejenigen mit ID-Werten ungleich Null herausfiltert. Letztendlich hängt die Wahl des Optimierungsansatzes von den spezifischen Daten- und Leistungsanforderungen der Anwendung ab.

Das obige ist der detaillierte Inhalt vonWie kann ich die letzte Zeile für jede Gruppe in MySQL-Gruppen-nach-Abfragen effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage