Heim > Datenbank > MySQL-Tutorial > Wie kann ich den letzten Datensatz in jeder Gruppe in MySQL effizient abrufen?

Wie kann ich den letzten Datensatz in jeder Gruppe in MySQL effizient abrufen?

Barbara Streisand
Freigeben: 2025-01-25 19:36:09
Original
180 Leute haben es durchsucht

How Can I Efficiently Retrieve the Last Record in Each Group in MySQL?

MySQL: Extrahieren des endgültigen Datensatzes aus jeder Gruppe

In diesem Handbuch werden effiziente Methoden zum Abrufen des letzten Datensatzes in jeder Gruppe in einer MySQL -Datenbank untersucht. Wir werden Techniken untersuchen, die für MySQL 8.0 und frühere Versionen geeignet sind.

Mysql 8.0 und Fensterfunktionen:

MySQL 8.0 führte Fensterfunktionen ein und bietet einen optimierten Ansatz. Die folgende Abfrage verwendet ROW_NUMBER(), um jedem Datensatz in seiner Gruppe einen Rang zuzuweisen, der von der Spalte id geordnet wurde (unter der Annahme id ist eine chronologische Reihenfolge):

<code class="language-sql">WITH ranked_messages AS (
  SELECT m.*, ROW_NUMBER() OVER (PARTITION BY name ORDER BY id DESC) AS rn
  FROM messages AS m
)
SELECT * FROM ranked_messages WHERE rn = 1;</code>
Nach dem Login kopieren

Diese Abfrage verteilt sich die Daten nach name (die Gruppierungsspalte) und weist den letzten Datensatz in jeder Partition zu.

.

pre-mysql 8.0-Techniken:

Für MySQL -Versionen vor 8.0 sind alternative Strategien erforderlich:

Methode 1: Unterabfrage mit Gruppe nach:

Diese Methode nutzt eine Unterabfrage, um die Daten zu bestellen, und gruppiert dann die Ergebnisse:
<code class="language-sql">SELECT
  *
FROM (SELECT
  *
FROM messages
ORDER BY id DESC) AS x
GROUP BY name</code>
Nach dem Login kopieren

Methode 2: Linksverbindung mit Nullfilterung:

LEFT JOIN Dieser Ansatz verwendet ein NULL, um jeden Datensatz mit anderen in derselben Gruppe zu vergleichen. Aufzeichnungen ohne nachfolgenden Datensatz (angezeigt durch ein

im Join) repräsentieren den letzten Datensatz in der Gruppe:
<code class="language-sql">SELECT m1.*
FROM messages m1 LEFT JOIN messages m2
 ON (m1.name = m2.name AND m1.id < m2.id)
WHERE m2.id IS NULL;</code>
Nach dem Login kopieren

Leistungsanalyse:

LEFT JOIN Die Leistung dieser Methoden hängt von der Datengröße und der Datenbankkonfiguration ab. Während die Fensterfunktionen im Allgemeinen effizient sind, übertrifft die GROUP BY -Methode die LEFT JOIN -Ebimery häufig, insbesondere für große Datensätze. Benchmark -Tests an wesentlichen Datensätzen (z. B. die Datenbank von Stackoverflow August 2009) haben gezeigt, dass der Ansatz

signifikant schneller ist.

Schlussfolgerung:

Die Fensterfunktionen von LEFT JOIN MySQL 8.0 bieten eine elegante und häufig effiziente Lösung. Für ältere MySQL -Versionen bietet die

-Methode eine robuste und häufig schnellere Alternative, insbesondere im Umgang mit großen Tischen. Der beste Ansatz hängt von Ihrer spezifischen MySQL -Version und Datensatzgröße ab.

Das obige ist der detaillierte Inhalt vonWie kann ich den letzten Datensatz in jeder Gruppe in MySQL 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