Heim > Datenbank > MySQL-Tutorial > Wie kann ich die letzte Zeile jeder Gruppe in MySQL effizient zurückgeben?

Wie kann ich die letzte Zeile jeder Gruppe in MySQL effizient zurückgeben?

DDD
Freigeben: 2024-11-11 20:29:02
Original
659 Leute haben es durchsucht

How to Efficiently Return the Last Row of Each Group in MySQL?

Die letzte Zeile jeder Gruppe in MySQL effektiv zurückgeben

Das Zurückgeben der letzten Zeile jeder Gruppe in MySQL ist häufig für die Datenmanipulation erforderlich. Die in der Eingabeaufforderung bereitgestellte Abfrage:

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

erreicht dies, indem sie eine verschachtelte Abfrage durchführt, um die maximale ID für jede eindeutige UID zu finden, und dann nur die Zeilen mit der passenden ID auswählt.

Ein effizienterer Ansatz

Jedoch kann eine effizientere Abfrage verwendet werden, um die verschachtelte Abfrage zu eliminieren:

SELECT t1.* 
FROM foo t1
JOIN (
    SELECT uid, MAX(id) AS max_id 
    FROM foo 
    GROUP BY uid
) t2 ON t1.id = t2.max_id;
Nach dem Login kopieren

Diese Abfrage verwendet eine JOIN-Operation, um das Maximum direkt abzugleichen ID für jede UID, was eine verbesserte Leistung im Vergleich zum Ansatz mit verschachtelten Abfragen bietet.

Zusätzliche Überlegungen zur Optimierung

Zur weiteren Optimierung kann EXPLAIN verwendet werden, um den Abfrageplan zu analysieren und Identifizieren Sie mögliche Engpässe. Darüber hinaus kann ein Index für die UID-Spalte die Abfrageleistung erheblich verbessern.

Alternativer Ansatz

Eine weitere Option ist die Verwendung der LAG()-Funktion:

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 verwendet die Funktion LAG(), um die nächste Zeile in der Gruppe zu identifizieren. Wenn es keine nachfolgende Zeile gibt (d. h. die aktuelle Zeile ist die letzte in ihrer Gruppe), gibt die Abfrage die aktuelle Zeile zurück. Obwohl dieser Ansatz effizient sein kann, ist er möglicherweise nicht immer so leistungsfähig wie die oben besprochenen JOIN-basierten Abfragen.

Das obige ist der detaillierte Inhalt vonWie kann ich die letzte Zeile jeder Gruppe in MySQL effizient zurückgeben?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage