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

Eine kurze Diskussion über die Rolle von Vue3 defineComponent

Inhaltsverzeichnis defineComponent-Überladungsfun...

Beispielcode zum Festlegen des Beschriftungsstils mithilfe des CSS-Selektors

CSS-Selektoren Durch Festlegen des Stils für das ...

Drei Möglichkeiten zum Implementieren eines Textfarbverlaufs in CSS

Bei der Entwicklung von Web-Frontends entwerfen U...

Leistung des Node+Express-Testservers

Inhaltsverzeichnis 1 Testumgebung 1.1 Server-Hard...

Codeanalyse von Benutzervariablen in MySQL-Abfrageanweisungen

Im vorherigen Artikel haben wir die MySQL-Optimie...

Allgemeine Linux-Befehle chmod zum Ändern der Dateiberechtigungen 777 und 754

Der folgende Befehl wird häufig verwendet: chmod ...

Analyse und Lösungen für Probleme bei der Verwendung von Label-Tags

Ich habe kürzlich bei einer bestimmten Aufgabe das...

JavaScript zum Erzielen eines einfachen Lupeneffekts

In einem großen Kästchen befindet sich ein Bild. ...

Lassen Sie uns ausführlich über Vues Mixin und Vererbung sprechen

Inhaltsverzeichnis Vorwort Mischen Mixin-Hinweis ...

Installieren Sie MySQL (einschließlich utf8) mit Docker unter Windows/Mac

Inhaltsverzeichnis 1. Docker-Installation auf dem...

JavaScript zum Hinzufügen und Löschen von Nachrichten im Message Board

Dieser Artikel zeigt ein kleines Beispiel für das...

Grundlegendes Lernen und Erfahrungsaustausch zu MySQL-Transaktionen

Eine Transaktion ist eine logische Gruppe von Ope...

So lösen Sie das Problem des Randkollapses in CSS

Betrachten wir zunächst drei Situationen, in dene...