MySQL fragt den aktuellsten Datensatz der SQL-Anweisung ab (Optimierung)

MySQL fragt den aktuellsten Datensatz der SQL-Anweisung ab (Optimierung)

Die schlechteste Option besteht darin, die Ergebnisse nach Zeit zu sortieren und das erste zu nehmen.

Wählen Sie * aus einem 
wobei Erstellungszeit<="2017-03-29 19:30:36" 
Sortieren nach Erstellungszeitpunkt desc
Grenze 1

Obwohl diese Methode den aktuellsten Datensatz zum aktuellen Zeitpunkt abrufen kann, muss die Tabelle für jede Abfrage einmal durchlaufen werden, was bei Abfragen mit mehr als einer Million Datenpunkten zeitaufwändig ist. Bei limit werden zuerst alle Ergebnisse und dann das erste abgerufen, was unnötig viel Zeit und Platz in der Abfrage beansprucht. Und wenn Sie den aktuellsten Datensatz stapelweise abrufen müssen, z. B.: „Eine Bestelltabelle enthält Benutzer, Bestellzeiten und -mengen, und Sie müssen die aktuellsten Bestelldatensätze aller Benutzer gleichzeitig abfragen“, muss für die Abfrage jedes Benutzers die gesamte Tabelle einmal durchlaufen werden. Bei großen Datenmengen erhöht sich die Zeit exponentiell und kann nicht in der Praxis genutzt werden.

Mittlere Strategie - Abfrage sortiert und gruppiert nach

Wählen Sie * aus (
  Wählen Sie * aus einem
  wobei Erstellungszeit<="2017-03-29 19:30:36" 
  Sortieren nach Erstellungszeitpunkt desc
) Gruppierung nach Benutzer-ID

Später stellte ich fest, dass ich mit „group by“ zwar nach der Parameterspalte von „group by“ gruppieren kann, aber nur ein Ergebnis zurückgibt. Nach genauer Beobachtung stellte ich fest, dass „group by“ den ersten Datensatz nach der Gruppierung zurückgibt. Standardmäßig wird die Zeit nach der Abfrage der Reihe nach sortiert. Sie müssen die Zeit daher zunächst in umgekehrter Reihenfolge sortieren, um die Zeit abzurufen, die der aktuellen am nächsten kommt.

Diese Abfrage führt tatsächlich zwei Abfragen aus. Obwohl die Zeit viel schneller ist als bei der ersten Methode, kann sie weiter optimiert werden.

Die beste Strategie besteht darin, die Methode max() in Kombination mit group by zu verwenden.

Wählen Sie *,max(create_time) aus einem
wobei Erstellungszeit<="2017-03-29 19:30:36" 
Gruppieren nach Benutzer-ID

Dieser Satz kann so verstanden werden, dass der Ergebnisset nach der Benutzer-ID gruppiert wird und der Datensatz mit der längsten Zeit in jeder Gruppe übernommen wird. Dadurch ist eine stapelweise Abfrage der neuesten Datensätze möglich und es muss nur einmal durch die Tabelle gegangen werden, so dass die Ergebnisse auch bei sehr großen Datenmengen in kürzester Zeit vorliegen.

Erweiterungen:

Jetzt gibt es eine Asset-Ausstattungstabelle: base_assets_turn

Abfrage des neuesten Vermögensverwalters

Hinweis: Angenommen, die Anlagennummer ASSETS_ID=254

Die nächstbeste Option:

Wählen Sie * aus Base_Assets_Turn 
wobei ASSETS_ID = 254
Sortieren nach Erstellungszeitpunkt desc
Grenze 1

Mittlere Politik:

wählen Sie * aus (wählen Sie * aus base_assets_turn 
wobei ASSETS_ID = 254
Sortiert nach Erstellungszeitpunkt, absteigend) tt GROUP BY tt.ASSETS_ID;

Beste Strategie:

Wie sollte also die beste Strategie formuliert werden? Hinterlassen Sie gerne eine Nachricht!

Oben finden Sie die MySQL-SQL-Anweisung zum Abfragen des aktuellsten Datensatzes (Optimierung), die Ihnen vom Herausgeber zur Verfügung gestellt wurde. Ich hoffe, sie ist für alle hilfreich. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht!

Das könnte Sie auch interessieren:
  • Eine kurze Erläuterung von 30 gängigen Methoden zur Optimierung von SQL-Abfragen in MySQL
  • 10 SQL-Anweisungsoptimierungstechniken zur Verbesserung der MySQL-Abfrageeffizienz
  • 10 Tipps zur Optimierung von MySQL SQL-Anweisungen
  • Detaillierte Erläuterung der MySQL SQL-Anweisungsanalyse und Abfrageoptimierung
  • Analysieren Sie die Probleme der SQL-Anweisungseffizienzoptimierung beim Lesen, Schreiben, Indizieren und anderen Vorgängen in MySQL-Tabellen
  • Tipps zur Optimierung von MySQL SQL-Anweisungen
  • MySQL-Optimierung: So schreiben Sie hochwertige SQL-Anweisungen
  • 19 gängige und effektive Methoden zur MySQL-Optimierung (empfohlen!)

<<:  Installation, Konfiguration und Verwendung des Process Daemon Supervisors unter Linux

>>:  Beispielcode für ein einfaches, nahtlos scrollendes Karussell, implementiert mit nativem Js

Artikel empfehlen

Native JS implementiert einen sehr gut aussehenden Zähler

Heute zeige ich Ihnen einen gut aussehenden Zähle...

Warum TypeScripts Enum problematisch ist

Inhaltsverzeichnis Was ist passiert? Verwendung S...

Implementierung von 2D- und 3D-Transformationen in CSS3

CSS3 implementiert 2D-Ebenentransformation und vi...

Zusammenfassung aller HTML-Interviewfragen

1. Die Rolle des Doctypes, der Unterschied zwisch...

So implementieren Sie Vue Page Jump

1. dies.$router.push() 1. Ansicht <Vorlage>...

So komprimieren Sie Bilder effektiv mit JS

Inhaltsverzeichnis Vorwort Konvertierungsbeziehun...

Eine detaillierte Anleitung zu benutzerdefinierten Anweisungen in Vue

Inhaltsverzeichnis 1. Was ist eine benutzerdefini...

Detaillierte Erklärung zur korrekten Verwendung der if-Funktion in MySQL

Für das, was ich heute schreiben werde, lief das ...