So verwenden Sie das MySQL-Limit und lösen das Problem großer Paging-Aufgaben

So verwenden Sie das MySQL-Limit und lösen das Problem großer Paging-Aufgaben

Vorwort

Wenn wir in der täglichen Entwicklung MySQL zur Implementierung von Paging verwenden, verwenden wir immer die MySQL-Grenzsyntax. Aber die Verwendung ist sehr speziell. Lassen Sie uns das heute zusammenfassen.

Limit-Syntax

Die Grenzwertsyntax unterstützt zwei Parameter: Offset und Limit. Ersterer gibt den Offset an, und letzterer gibt an, dass die ersten Grenzwertdaten übernommen werden.

Zum Beispiel:

## Gibt die ersten 10 Anweisungen zurück, die die Bedingungen erfüllen. select * from user limit 10

## Gibt die 11. bis 20. Daten zurück, die die Bedingungen erfüllen. Wählen Sie * aus dem Benutzerlimit 10,20

Aus dem Obigen ist auch ersichtlich, dass der Grenzwert n dem Grenzwert 0,n entspricht.

Leistungsanalyse

Bei der tatsächlichen Verwendung werden wir feststellen, dass das Laden einiger Seiten hinter der Paginierung langsamer wird, das heißt:

Wählen Sie * ab Benutzerlimit 1000000,10

Die Anweisung wird langsam ausgeführt. Testen wir sie also zuerst.

Zunächst nehmen wir 100 Daten mit einem kleinen Offset (die Gesamtdatenmenge beträgt ca. 200). Dann erhöhen wir den Offset schrittweise.

select * ab Benutzerlimit 0,100 ---------Zeitaufwand 0,03 s
select * ab Benutzerlimit 10000,100 ---------Zeitaufwand 0,05 s
select * ab Benutzerlimit 100000,100 ---------Zeitaufwand 0,13 s
select * ab Benutzerlimit 500000,100 ---------Zeitaufwand 0,23 s
select * ab Benutzerlimit 1000000,100 ---------Zeitaufwand 0,50 s
select * ab Benutzerlimit 1800000,100 ---------Zeitaufwand 0,98 s

Es ist ersichtlich, dass die Leistung mit zunehmendem Offset immer schlechter wird.

Warum ist das so? Weil die Syntax von limit 10000,10 eigentlich bedeutet, dass MySQL die ersten 10010 Datenzeilen findet und dann die ersten 10000 Zeilen verwirft. Dieser Schritt ist eigentlich Verschwendung.

Optimierung

Optimieren mit ID

Suchen Sie zuerst die maximale ID der letzten Paginierung und verwenden Sie dann den Index auf der ID zur Abfrage, ähnlich wie bei „select * from user where id>1000000 limit 100“.
Dies ist sehr effizient, da der Primärschlüssel indiziert ist, hat jedoch den Nachteil, dass die IDs aufeinander folgen müssen und die Abfrage keine Where-Anweisung enthalten kann, da die Where-Anweisung die Daten filtern würde.

Optimieren mit abdeckenden Indizes

Wenn eine MySQL-Abfrage einen Index vollständig trifft, wird dies als abdeckender Index bezeichnet. Dies ist sehr schnell, da die Abfrage nur den Index durchsuchen muss und dann direkt zurückkehren kann, ohne zur Datentabelle zurückkehren zu müssen, um die Daten abzurufen. Daher können wir zuerst die Index-ID finden und dann die Daten basierend auf der ID abrufen.

select * from (select id from job limit 1000000,100) a left join job b on a.id = b.id;

Dies dauerte 0,2 Sekunden.

Zusammenfassen

Es ist tatsächlich schwierig, MySQL zum Paginieren großer Datenmengen zu verwenden, es gibt jedoch einige Möglichkeiten zur Optimierung, was weitere Tests in Kombination mit Geschäftsszenarien erfordert.
Wenn der Benutzer Seite 10.000 aufschlägt, warum geben wir dann nicht einfach etwas Leeres zurück? Ist das so langweilig?

Das ist alles für diesen Artikel. Ich hoffe, dass der Inhalt dieses Artikels für Ihr Studium oder Ihre Arbeit von gewissem Referenzwert ist. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • MySQL-Abfrageoptimierung: LIMIT 1 vermeidet vollständigen Tabellenscan und verbessert die Abfrageeffizienz
  • Warum wird die MySQL-Paging-Funktion bei Verwendung von Limits immer langsamer?
  • Beschreibung des MySQL-Optimierungsparameters query_cache_limit
  • Detaillierte Erläuterung der Fallstricke beim Mischen von MySQL-Order-By und Limit
  • Einfaches Beispiel für den Grenzwertparameter der MySQL-Paging
  • Gründe und Optimierungslösungen für langsames MySQL-Limit-Paging mit großen Offsets
  • Mysql-Sortierung und Paginierung (Order by & Limit) und vorhandene Fallstricke
  • Detaillierte Erläuterung des Problems der gemischten Verwendung von Limit- und Summenfunktionen in MySQL
  • So verbessern Sie die MySQL Limit-Abfrageleistung
  • Detaillierte Erläuterung der MySQL Limit-Leistungsoptimierung und der Paging-Daten-Leistungsoptimierung
  • Eine kurze Diskussion über die Implementierung der MySQL-Lösung zur Optimierung des Seitenlimits
  • Die Auswirkungen des Limits auf die Abfrageleistung in MySQL

<<:  Linux Bash: ./xxx: Fehler „Binärdatei kann nicht ausgeführt werden“

>>:  Mehrere gängige Methoden zum Senden von Anfragen mit Axios in React

Artikel empfehlen

js canvas realisiert kreisförmige Wasseranimation

In diesem Artikelbeispiel wird der spezifische Co...

CSS-Code zur Unterscheidung von IE8/IE9/IE10/IE11 Chrome Firefox

Das Debuggen der Website-Kompatibilität ist wirkl...

Beispiele für MySQL-Batch-Hinzufügungs- und Speichermethoden

Beim Anmelden am Stresstest sind viele verschiede...

Der Unterschied zwischen JS-Pre-Parsing und Variablen-Promotion im Web-Interview

Inhaltsverzeichnis Was ist eine Voranalyse? Der U...

Vue realisiert einfachen Effekt des Lauflichts

In diesem Artikel wird der spezifische Code von V...

Kurze Analyse von MySQL Union und Union All

In der Datenbank führen sowohl die Schlüsselwörte...

Syntax-Alias-Problem basierend auf Löschen in MySQL

Inhaltsverzeichnis MySQL-Löschsyntax-Aliasproblem...

So verwenden Sie Umgebungsvariablen in der Nginx-Konfigurationsdatei

Vorwort Nginx ist ein auf Leistung ausgelegter HT...

Vue3 setup() - Erweiterte Verwendungsbeispiele - ausführliche Erklärung

Inhaltsverzeichnis 1. Unterschiede zwischen Optio...