MySQL ruft effizient den letzten Datensatz jeder Gruppe ab
In SQL kann es schwierig sein, den neuesten Datensatz für jede Gruppe zu extrahieren. Ein häufiges Szenario ist: Es gibt mehrere Datensätze in der Tabelle, die denselben Primärschlüssel verwenden, und der neueste Eintrag für jeden Primärschlüssel muss extrahiert werden. Dieser Artikel bietet eine effiziente und optimierte Lösung.
Problembeschreibung
Bedenken Sie die folgende messages
Tabelle:
Id | Name | Other_Columns |
---|---|---|
1 | A | A_data_1 |
2 | A | A_data_2 |
3 | A | A_data_3 |
4 | B | B_data_1 |
5 | B | B_data_2 |
6 | C | C_data_1 |
Eine einfache Gruppenabfrage mit SELECT * FROM messages GROUP BY Name
liefert die folgenden Ergebnisse:
Id | Name | Other_Columns |
---|---|---|
1 | A | A_data_1 |
4 | B | B_data_1 |
6 | C | C_data_1 |
Die gewünschte Ausgabe ist jedoch der neueste Datensatz für jede Gruppe:
Id | Name | Other_Columns |
---|---|---|
3 | A | A_data_3 |
5 | B | B_data_2 |
6 | C | C_data_1 |
Lösung
Fensterfunktionen verwenden (MySQL 8.0 und höher)
MySQL 8.0 führte Fensterfunktionen ein, die eine elegante Lösung zum Auffinden des letzten Datensatzes jeder Gruppe bieten. Die folgende Abfrage nutzt die Funktion ROW_NUMBER()
, um dies zu erreichen:
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;
Verwenden Sie LEFT JOIN (frühe Version von MySQL)
Vor MySQL 8.0 war die effizienteste Lösung die Verwendung von LEFT JOIN
:
SELECT m1.* FROM messages m1 LEFT JOIN messages m2 ON (m1.name = m2.name AND m1.id < m2.id) WHERE m2.id IS NULL;
Leistung und Anwendbarkeit
Obwohl beide Lösungen effizient sind, kann ihre Leistung je nach Größe und Verteilung der Daten variieren. Für große und vielfältige Datensätze wird häufig der Fensterfunktionsansatz empfohlen.
Wenn die Daten ein bestimmtes Muster aufweisen (z. B. relativ wenige Datensätze pro Gruppierung), ist der LEFT JOIN
-Ansatz möglicherweise effizienter.
Benchmark
Der LEFT JOIN
-Ansatz hat sich in vielen Fällen als überlegen gegenüber Gruppierungstechniken erwiesen. In einer großen Datenbank mit Millionen von Zeilen dauert die Ausführung der LEFT JOIN
-Methode beispielsweise weniger als eine Sekunde, während die Gruppierungstechnik mehr als eine Minute benötigt.
Es wird jedoch immer empfohlen, beide Lösungen anhand Ihres spezifischen Datensatzes zu testen, um den besten Ansatz zu ermitteln.
Das obige ist der detaillierte Inhalt vonWie finde ich effizient den letzten Datensatz in jeder Gruppe in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Mysqlblobshavelimits: Tinyblob (255Bytes), Blob (65.535 Bytes), Mediumblob (16.777.215 Bytes), Andlongblob (4,294.967.295 Bytes) .TouseBl Obseffektiv: 1) TipperformanceImpactsandStorElargblobsexternal;

Zu den besten Tools und Technologien zur Automatisierung der Erstellung von Benutzern in MySQL gehören: 1. MySQLWorkbench, geeignet für kleine bis mittlere Umgebungen, einfach zu bedienen, aber mit hohem Ressourcenverbrauch. 2. Ansible, geeignet für Multi-Server-Umgebungen, einfache, aber steile Lernkurve; 3.. Benutzerdefinierte Python -Skripte, flexibel, müssen aber die Sicherheitskriptsicherheit gewährleisten. 4. Puppen- und Küchenchef, geeignet für groß angelegte Umgebungen, komplex, aber skalierbar. Bei der Auswahl sollten Maßstab, Lernkurve und Integrationsanforderungen berücksichtigt werden.

Ja, youcansearchinSideabloBinMysqlusingSpecifictechniques.1) konvertieren theBloboToAutf-8stringwithConvertfunctionandSearchused-Like.2) ficRpressedblobs, UseUncompressBeForeConversion.3) IncentalanceImpactSandSandDataCoding.4) Forcompomplexdata, ExternalPactsandDataCoding.4) Forcompomplexdata, ExternalPactsandDataCoding.4) Forcompomplexdata, ExternalPracing.

MySQLoffersvariousstringdatatypes:1)CHARforfixed-lengthstrings,idealforconsistentlengthdatalikecountrycodes;2)VARCHARforvariable-lengthstrings,suitableforfieldslikenames;3)TEXTtypesforlargertext,goodforblogpostsbutcanimpactperformance;4)BINARYandVARB

Tomastermysqlblobs, folge thessteps: 1) choosetheApprotedblobType (Tinyblob, Blob, Mediumblob, Longblob) basiertdondeatasize

BlobDatatypesinmysqlareUTForVoringLargebinaryDatalikeMageSoraudio.1) UseBlobTypes (Tinyblobtolongblob) basiertdatasizeneeds. 2) StoreBlobsin Perplate Petooptimize -Leistung.3) berücksichtigt den Vorbild für Forel Blob Romana DatabaseSizerIndimProveBackupupe

ToadduSerStomysqlfromtheCommandline, loginasroot, thenusecreateuser'username '@' host'identified by'password ';

MySqloffereightStringDatatypes: char, varchar, binär, varbarin, blob, text, enum.1) charisfixed-length, idealforconsistentDatalikecountrycodes.2) varcharisvariable-Länge, effizientes VariationDatalikenames.3)


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Dreamweaver CS6
Visuelle Webentwicklungstools

PHPStorm Mac-Version
Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.
