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?

Susan Sarandon
Freigeben: 2025-01-25 19:42:12
Original
909 Leute haben es durchsucht

How to Efficiently Retrieve the Last Record in Each Group in MySQL?

MySQL: Extrahieren des endgültigen Eintrags aus jeder Datengruppe

Ein häufiger Datenbankvorgang umfasst das Abrufen des aktuellsten Datensatzes innerhalb jeder Datengruppe. Obwohl GROUP BY häufig verwendet wird, kann es zu Leistungsproblemen führen.

Suboptimaler Ansatz

Die folgende Abfrage versucht Folgendes:

<code class="language-sql">SELECT
  *
FROM (SELECT
  *
FROM messages
ORDER BY id DESC) AS x
GROUP BY name</code>
Nach dem Login kopieren

Diese Methode ist ineffizient, da die äußere Abfrage die gesamte Tabelle nach jeder Gruppe durchsucht, unabhängig von effizienteren Alternativen.

Optimierte Lösung (MySQL 8.0)

MySQL 8.0 und spätere Versionen bieten Fensterfunktionen für verbesserte gruppenweise Vorgänge. ROW_NUMBER() identifiziert effizient den letzten Datensatz in jeder Gruppe:

<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 ordnet jede Zeile innerhalb ihrer Gruppe und wählt dann jeweils nur den am höchsten bewerteten (letzten) Datensatz aus.

Alternative (Pre-MySQL 8.0)

Für ältere MySQL-Versionen (vor 8.0) ist dieser Ansatz geeignet:

<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

Dabei wird ein LEFT JOIN verwendet, um Zeilen ohne ein höheres id innerhalb derselben Gruppe zu finden, wodurch der letzte Datensatz in jeder effektiv isoliert wird.

Leistungsüberlegungen

Die optimale Abfrage hängt stark von Ihrer Datengröße, Gruppenverteilung und vorhandenen Indizes ab. Das Benchmarking Ihres spezifischen Szenarios ist entscheidend für die Auswahl der effizientesten Lösung.

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