Praktische Optimierung des MySQL-Paging-Limits

Praktische Optimierung des MySQL-Paging-Limits

Vorwort

Wenn wir Abfrageanweisungen verwenden, müssen wir häufig die ersten oder mittleren Datenzeilen zurückgeben. Was sollten wir jetzt tun? Keine Sorge, MySQL stellt uns bereits eine solche Funktion zur Verfügung.

SELECT * FROM Tabelle LIMIT [Offset,] Zeilen | Zeilen OFFSET Offset

Mit der LIMIT-Klausel können Sie eine SELECT-Anweisung zwingen, eine bestimmte Anzahl von Datensätzen zurückzugeben. LIMIT akzeptiert ein oder zwei numerische Argumente. Das Argument muss eine ganzzahlige Konstante sein. Wenn zwei Argumente angegeben werden, gibt das erste Argument den Offset der ersten zurückgegebenen Zeile und das zweite Argument die maximale Anzahl der zurückgegebenen Zeilen an. Der anfängliche Zeilenoffset ist 0 (nicht 1): Aus Kompatibilitätsgründen mit PostgreSQL unterstützt MySQL auch die Syntax: LIMIT # OFFSET #.

Daher verwenden wir beim Abfragen von Daten normalerweise eine begrenzte Paginierung, da dadurch vollständige Tabellenabfragen vermieden und die Abfrageeffizienz verbessert werden. Wenn jedoch die Datenmenge in einer Tabelle zunimmt, werden Paging-Abfragen langsamer. Schauen wir uns die ausführliche Einführung unten an.

Optimierung des MySQL-Paging-Limits

Erstellen Sie eine Testtabellenkarte mit 20 Millionen Daten

mysql> wähle Anzahl(*) von Karte aus;
+----------+
| Anzahl(*) |
+----------+
| 20000000 |
+----------+
1 Zeile im Satz (0,00 Sek.)

-Testen Sie zunächst die Abfragegeschwindigkeit der ersten 1000 Zeilen

mysql> Auswahl * ab Kartenlimit 1000,10;
+---------+--------------------------------------+
| Karten-ID | Kartennummer |
+---------+--------------------------------------+
| 1001 | 13fc90a6-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1002 | 13fc923e-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1003 | 13fc93d5-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1004 | 13fc956a-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1005 | 13fc9702-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1006 | 13fc9899-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1007 | 13fc9a31-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1008 | 13fc9bc6-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1009 | 13fc9d5e-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1010 | 13fc9ef5-2e3b-11e8-ae62-9c5c8e6e37cf |
+---------+--------------------------------------+
10 Zeilen im Satz (0,00 Sek.)

-Testen Sie die Abfrage nach 1 Million

mysql> Auswahl * vom Kartenlimit 1000000,10;
+---------+--------------------------------------+
| Karten-ID | Kartennummer |
+---------+--------------------------------------+
| 1000001 | 2d87021a-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000002 | 2d8703ac-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000003 | 2d87053b-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000004 | 2d8706cd-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000005 | 2d87085f-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000006 | 2d8709f1-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000007 | 2d870b83-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000008 | 2d870d18-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000009 | 2d870eaa-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000010 | 2d871039-2e3b-11e8-ae62-9c5c8e6e37cf |
+---------+--------------------------------------+
10 Zeilen im Satz (0,18 Sek.)

-Testen Sie die Abfrage nach 10 Millionen

mysql> Auswahl * ab Kartenlimit 10000000,10;
+----------+--------------------------------------+
| Karten-ID | Kartennummer |
+----------+--------------------------------------+
| 10000001 | b11ad76c-2e49-11e8-ae62-9c5c8e6e37cf |
| 10000002 | b11aefd5-2e49-11e8-ae62-9c5c8e6e37cf |
| 10000003 | b11af868-2e49-11e8-ae62-9c5c8e6e37cf |
| 10000004 | b11b0031-2e49-11e8-ae62-9c5c8e6e37cf |
| 10000005 | b11b07ad-2e49-11e8-ae62-9c5c8e6e37cf |
| 10000006 | b11b0f0f-2e49-11e8-ae62-9c5c8e6e37cf |
| 10000007 | b11b1669-2e49-11e8-ae62-9c5c8e6e37cf |
| 10000008 | b11b1db2-2e49-11e8-ae62-9c5c8e6e37cf |
| 10000009 | b11b24fa-2e49-11e8-ae62-9c5c8e6e37cf |
| 10000010 | b11b2c37-2e49-11e8-ae62-9c5c8e6e37cf |
+----------+--------------------------------------+
10 Reihen im Satz (1,29 Sek.)

Es ist ersichtlich, dass die Abfrageeffizienz mit der Zeit abnimmt. Denn wenn Daten nach 1 Million abgefragt werden, fragt MySQL zuerst 1 Million und 10 Daten ab und fängt dann die folgenden zehn Daten ab. Diese führen zu einer Verschlechterung der Leistung.

Wie lässt sich also das Scannen von einer Million Daten vermeiden? Wir können eindeutig erkennen, dass der Primärschlüssel nach 1 Million größer als 1 Million ist. Wir können also das SQL umschreiben, um den Index zu verwenden und die Anzahl der gescannten Zeilen zu reduzieren

mysql> Auswahl * von Karte, wobei Karten-ID>=1000000, Limit 10;
+---------+--------------------------------------+
| Karten-ID | Kartennummer |
+---------+--------------------------------------+
| 1000000 | 2d870088-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000001 | 2d87021a-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000002 | 2d8703ac-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000003 | 2d87053b-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000004 | 2d8706cd-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000005 | 2d87085f-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000006 | 2d8709f1-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000007 | 2d870b83-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000008 | 2d870d18-2e3b-11e8-ae62-9c5c8e6e37cf |
| 1000009 | 2d870eaa-2e3b-11e8-ae62-9c5c8e6e37cf |
+---------+--------------------------------------+
10 Zeilen im Satz (0,00 Sek.)

Dies kann die Abfrageeffizienz erheblich verbessern

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Mysql-Sortierung und Paginierung (Order by & Limit) und vorhandene Fallstricke
  • MySQL verwendet ein Limit, um die Beispielmethode für Paging zu implementieren
  • So verwenden Sie das MySQL-Limit und lösen das Problem großer Paging-Aufgaben
  • Eine kurze Diskussion über die Leistungsprobleme des MySQL-Paging-Limits
  • 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
  • Detaillierte Erläuterung der MySQL-Limitnutzung und Leistungsanalyse von Paging-Abfrageanweisungen
  • Verwendung und Hinweise zur MySQL-Begrenzungspaginierung
  • Optimierungsmethode für MySQL-Paging-Grenzgeschwindigkeit ist zu langsam
  • Gründe und Optimierungslösungen für langsames MySQL-Limit-Paging mit großen Offsets

<<:  Implementierung der Nummernschild-Eingabefunktion im WeChat-Applet

>>:  Koexistenz von Python2 und Python3 unter einem CentOS7-System

Artikel empfehlen

Sieben verschiedene Farbschemata für das Website-Design-Erlebnis

Die Farbabstimmung beim Erstellen einer Website i...

Vue führt eine Überprüfung durch, ob der Benutzername verfügbar ist

In diesem Artikelbeispiel wird der spezifische Co...

js implementiert zufälligen Namensaufruf

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

Detaillierte Erklärung der grundlegenden Syntax und Datentypen von JavaScript

Inhaltsverzeichnis JavaScript importieren 1. Inte...

Zusammenfassung zum Erstellen und Verwenden von Array-Methoden in Bash-Skripten

Definieren eines Arrays in Bash Es gibt zwei Mögl...

Implementieren eines Webplayers mit JavaScript

Heute zeige ich Ihnen, wie Sie mit JavaScript ein...

Detaillierte Erläuterung der Komponentenentwicklung des Vue-Dropdown-Menüs

In diesem Artikelbeispiel wird der spezifische Co...

Tipps zum Organisieren von Zeichenfolgen in Linux

Bei Linux-Operationen ersetzen und zählen wir häu...

JavaScript imitiert den Jingdong-Karusselleffekt

In diesem Artikel wird der spezifische Code für J...

So löschen Sie node_modules und installieren es neu

Inhaltsverzeichnis Schritt 1: Installieren Sie no...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.22

Dieser Artikel dokumentiert die Installation und ...

Vue verwendet drei Methoden zum Aktualisieren der Seite

Beim Schreiben von Projekten stoßen wir häufig au...