Eine kurze Diskussion über die Leistungsprobleme des MySQL-Paging-Limits

Eine kurze Diskussion über die Leistungsprobleme des MySQL-Paging-Limits

MySQL-Paging-Abfragen werden normalerweise über Limits implementiert. limit akzeptiert 1 oder 2 ganzzahlige Parameter. Wenn es 2 Parameter sind, gibt der erste den Offset der ersten zurückgegebenen Datensatzzeile an und der zweite die maximale Anzahl der zurückgegebenen Datensatzzeilen. Der anfängliche Datensatzzeilenoffset ist 0. Aus Kompatibilitätsgründen mit PostgreSQL unterstützt Limit auch Limit # Offset #.

Frage:

Bei kleinen Offsets ist es kein Problem, Limit direkt für die Abfrage zu verwenden. Mit zunehmender Datenmenge wird jedoch der Offset der Limit-Anweisung größer und die Geschwindigkeit wird mit fortschreitender Paging-Funktion deutlich langsamer.

Optimierungsidee: Vermeiden Sie das Scannen zu vieler Datensätze, wenn das Datenvolumen groß ist

Lösung: Unterabfrage-Paging-Methode oder JOIN-Paging-Methode. Die Effizienz der JOIN-Paging- und Subquery-Paging-Funktionen liegt grundsätzlich auf dem gleichen Niveau, und auch der Zeitaufwand ist grundsätzlich gleich.

Hier ist ein Beispiel. Im Allgemeinen ist der Primärschlüssel von MySQL ein automatisch inkrementierender numerischer Typ. In diesem Fall kann die folgende Methode zur Optimierung verwendet werden.

Nehmen Sie als Beispiel eine Tabelle mit 60.000 Datensätzen in einer realen Produktionsumgebung, um die Abfragezeit vor und nach der Optimierung zu vergleichen:

-- Traditionelle Begrenzung, Dateiscan [SQL]
AUSWÄHLEN * AUS Tabellenname ORDER BY ID LIMIT 50000,2;
Betroffene Zeilen: 0
Zeit: 0,171 s

-- Unterabfragemethode, Index-Scan [SQL]
SELECT * FROM Tabellenname
WO id >= (SELECT id FROM tableName ORDER BY id LIMIT 50000 , 1)
GRENZE 2;
Betroffene Zeilen: 0
Zeit: 0,035 s

-- JOIN-Paging-Methode [SQL]
SELECT * FROM Tabellenname AS t1
JOIN (SELECT id FROM Tabellenname ORDER BY id LIMIT 50000, 1) AS t2
WO t1.id <= t2.id ORDER BY t1.id LIMIT 2;
Betroffene Zeilen: 0
Zeit: 0,036 s

Es ist ersichtlich, dass die Leistung nach der Optimierung um ein Vielfaches verbessert wurde.

Optimierungsprinzip:

Unterabfragen werden auf dem Index ausgeführt, während normale Abfragen auf den Datendateien ausgeführt werden. Im Allgemeinen sind Indexdateien viel kleiner als Datendateien und können daher effizienter betrieben werden. Da der gesamte Feldinhalt abgerufen werden muss, muss die erste Methode eine große Anzahl von Datenblöcken umfassen und abrufen, während die zweite Methode den entsprechenden Inhalt grundsätzlich direkt abruft, nachdem er entsprechend dem Indexfeld lokalisiert wurde, was die Effizienz natürlich erheblich verbessert. Um das Limit zu optimieren, verwenden Sie es nicht direkt, sondern holen Sie sich zuerst die Offset-ID und verwenden Sie dann direkt die Limit-Größe, um die Daten abzurufen.

Bei der tatsächlichen Projektverwendung können Sie ein ähnliches Strategiemuster zum Umgang mit der Seitennummerierung verwenden. Wenn beispielsweise 100 Datensätze pro Seite vorhanden sind und die Anzahl der Seiten weniger als 100 beträgt, wird die einfachste Paging-Methode verwendet. Wenn die Anzahl der Seiten größer als 100 ist, wird die Unterabfrage-Paging-Methode verwendet.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Lösung zur Datenduplizierung bei Verwendung von Limit+Order By in der MySql-Paging
  • 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
  • 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
  • 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
  • MySQL-Limit-Leistungsanalyse und -Optimierung
  • Analyse der schlechten Leistung, die durch einen großen LIMIT-Offset in der MySQL-Abfrage verursacht wird
  • Warum wirkt sich die Verwendung von Limits in MySQL auf die Leistung aus?

<<:  Implementierung der Nginx-Arbeitsprozessschleife

>>:  Detaillierte Erklärung der Desktop-Anwendung mit Vue3 und Electron

Artikel empfehlen

JavaScript implementiert die Maussteuerung eines frei beweglichen Fensters

In diesem Artikel wird der spezifische JavaScript...

So optimieren Sie die MySQL-Leistung durch langsame MySQL-Abfragen

Mit zunehmender Anzahl von Besuchen steigt der Dr...

Bootstrap FileInput implementiert Bild-Upload-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

CentOS7-Upgrade des Kernels kernel5.0 Version

Upgrade-Prozess: Ursprüngliches System: CentOS7.3...

So erstellen Sie einen MySQL-Cluster mit hoher Verfügbarkeit und Leistung

Inhaltsverzeichnis Was ist MySQL NDB Cluster? Vor...

Detaillierte Analyse des MySQL 8.0-Speicherverbrauchs

Inhaltsverzeichnis 1. innodb_buffer_pool_size 2. ...

Konvertieren Sie ausgeschnittene PSD-Bilder in das Div+CSS-Format

Beispiel für das Zuschneiden einer Webseite von P...

Vergleich der von der MySQL-Datenbank unterstützten Speicher-Engines

Inhaltsverzeichnis Speicher-Engine Von MySQL unte...

Detaillierter Prozess der SpringBoot-Integration von Docker

Inhaltsverzeichnis 1. Demo-Projekt 1.1 Schnittste...

Ubuntu 18.04 installiert MySQL 5.7.23

Ich habe MySQL zuvor problemlos in Ubuntu 16.04 i...

Natives JS zum Erzielen eines Schiebeknopfeffekts

Der spezifische Code des mit Js erstellten Schieb...

Detaillierte Erläuterung des mobilen Projekts vite2.0 + vue3

1. Technische Punkte Vite-Version vue3 ts Integri...