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

JavaScript zum Erreichen einer festen Seitenleiste

Verwenden Sie Javascript, um eine feste Seitenlei...

Schritte zum Einrichten einer HTTPS-Website basierend auf Nginx

Inhaltsverzeichnis Vorwort: Verschlüsselungsalgor...

Detailliertes Installationstutorial für mysql-8.0.11-winx64.zip

Laden Sie das ZIP-Installationspaket herunter: Do...

Webdesign-Erfahrung: Das Navigationssystem schlank machen

<br />Bei Diskussionen mit meinen Freunden h...

So überwachen Sie die Windows-Leistung auf Zabbix

Hintergrundinformationen Ich habe kürzlich einige...

Detaillierte Untersuchung von vue2.x - Erklärung der h-Funktion

Inhaltsverzeichnis Lösung, Zusammenfassen: Vue-Pr...

js, um die Rotation von Webseitenbildern zu realisieren

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

Zusammenfassung der zwölf Methoden der Vue-Wertübertragung

Inhaltsverzeichnis 1. Vom Vater zum Sohn 2. Vom S...

Tutorial zur Verwendung von Webpack in JavaScript

Inhaltsverzeichnis 0. Was ist Webpack 1. Einsatz ...

CSS3 realisiert Textreliefeffekt, Gravureffekt, Flammentext

Um diesen Effekt zu erzielen, müssen Sie zunächst...

Implementierungscode von Nginx Anti-Hotlink und Optimierung in Linux

Versionsnummer verbergen Die Versionsnummer wird ...