Eine kurze Diskussion über die Implementierung der MySQL-Lösung zur Optimierung des Seitenlimits

Eine kurze Diskussion über die Implementierung der MySQL-Lösung zur Optimierung des Seitenlimits

MySQL begrenzt die Nutzung von Paging-Anweisungen

Im Vergleich zu Oracle und MS SqlServer ist die Paging-Methode von MySQL so einfach, dass es manchen die Tränen in die Augen treibt.

--Grammatik:

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

--Beispiel:

select * from table limit 5; --Gibt die ersten 5 Zeilen zurück select * from table limit 0,5; --Gibt das Gleiche wie oben an, gibt die ersten 5 Zeilen zurück select * from table limit 5,10; --Gibt die Zeilen 6-15 zurück

So optimieren Sie das Limit

Wenn eine Abfrageanweisung einen großen Offset hat, wie etwa select * from table limit 10000,10 , ist es am besten, limit nicht direkt zu verwenden. Holen Sie sich stattdessen zuerst die Offset-ID und verwenden Sie dann limit size direkt, um die Daten abzurufen. Die Wirkung wird viel besser sein.

wie:

Wählen Sie * Von Kunden, wobei Kunden-ID >=(
select customer_id Von Kunden Bestellen nach customer_id limit 10000,1
) Grenze 10;

1. Testexperiment

MySQL-Paging verwendet direkt die Paging-Anweisungen „Limit Start“ und „Count“:

select * ab Produktlimit Start, Anzahl

Wenn die Startseite klein ist, treten bei der Abfrage keine Leistungsprobleme auf. Betrachten wir die Ausführungszeit der Seitenumbrüche von 10, 100, 1000 und 10000 (20 Datensätze pro Seite) wie folgt:

Wählen Sie * aus Produktlimit 10, 20 0,016 Sekunden. Wählen Sie * aus Produktlimit 100, 20 0,016 Sekunden. Wählen Sie * aus Produktlimit 1000, 20 0,047 Sekunden. Wählen Sie * aus Produktlimit 10000, 20 0,094 Sekunden.

Wir haben gesehen, dass mit zunehmender Anzahl der Startdatensätze auch die Zeit zunimmt. Dies zeigt, dass die Begrenzung der Paging-Anweisung eng mit der Anzahl der Startseiten zusammenhängt.
Dann ändern wir den Startrekord auf 40 W (etwa die Hälfte des Rekords).

select * from product limit 400000, 20 3.229 Sekunden

Schauen wir uns den Zeitpunkt an, als wir die letzte Seite mit Aufzeichnungen entnommen haben.

select * from product limit 866613, 20 37.44 Sekunden

Für eine Seite mit der höchsten Seitenzahl wie dieser ist diese Zeit offensichtlich unerträglich.

Daraus können wir auch zwei Dinge schließen:

  • Die Abfragezeit der Limit-Anweisung ist proportional zur Position des Startdatensatzes.
  • Die MySQL-Limit-Anweisung ist sehr praktisch, aber nicht für die direkte Verwendung bei Tabellen mit vielen Datensätzen geeignet.

2. Leistungsoptimierungsmethode für das Problem des begrenzten Paging

2.1 Verwenden des überdeckenden Index der Tabelle zur Beschleunigung von Paging-Abfragen

Wir alle wissen, dass die Abfrage sehr schnell ist, wenn die Anweisung, die eine Indexabfrage verwendet, nur diese Indexspalte (den abdeckenden Index) enthält.

Da die Indexsuche über einen optimierten Algorithmus verfügt und sich die Daten im Abfrageindex befinden, muss nicht nach der relevanten Datenadresse gesucht werden, was viel Zeit spart.

Darüber hinaus verfügt MySQL auch über einen zugehörigen Index-Cache. Die Wirkung ist besser, wenn der Cache bei hoher Parallelität verwendet wird.

In unserem Beispiel wissen wir, dass das ID-Feld der Primärschlüssel ist, daher ist der Standard-Primärschlüsselindex eingeschlossen. Sehen wir uns nun an, wie die Abfrage mit dem überdeckenden Index funktioniert:
Diesmal fragen wir die Daten der letzten Seite ab (mithilfe eines überdeckenden Index, der nur die Spalte „id“ enthält) und zwar wie folgt:

Wählen Sie die ID aus dem Produktlimit 866613, 20

Die Abfragezeit beträgt 0,2 Sekunden und ist damit etwa 100-mal schneller als die 37,44 Sekunden, die zum Abfragen aller Spalten erforderlich sind.

Wenn wir auch alle Spalten abfragen möchten, gibt es zwei Möglichkeiten.

id>= Format:

Wählen Sie * aus Produkt 
WHERE ID > =(Wählen Sie die ID aus dem Produktlimit 866613, 1) Limit 20

Die Abfragezeit beträgt 0,2 Sekunden, was einen qualitativen Sprung darstellt.

Verwenden von Join

SELECT * FROM Produkt a 
JOIN (wähle ID aus Produktlimit 866613, 20) b ON a.ID = b.id

Auch die Abfragezeit ist sehr kurz, super!

Tatsächlich verwenden beide das gleiche Prinzip, daher sind die Effekte ähnlich.

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:
  • 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
  • So verwenden Sie das MySQL-Limit und lösen das Problem großer Paging-Aufgaben
  • 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
  • Die Auswirkungen des Limits auf die Abfrageleistung in MySQL

<<:  Analyse des Problems der Hyper-V-Installation unter CentOS 8

>>:  Mehrere Möglichkeiten, Bilder in React-Projekte einzuführen

Artikel empfehlen

Detaillierte Einführung in den DOCTYPE-Typ

<br />Wir deklarieren DOCTYPE in HTML normal...

Lösung für das Problem der Nullspalte in der NOT IN-Füllgrube in MySQL

Als ich vor einiger Zeit an einer kleinen Funktio...

Beispiel für die Ausführung eines MySQL-Befehlszeilenskripts

Dieser Artikel veranschaulicht anhand eines Beisp...

Vue implementiert das gleichzeitige Einstellen mehrerer Countdowns

In diesem Artikelbeispiel wird der spezifische Co...

Richtiger Einsatz von MySQL-Partitionstabellen

Übersicht über partitionierte MySQL-Tabellen Wir ...

Eine detaillierte Erklärung, wie React Fiber funktioniert

Inhaltsverzeichnis Was ist React Fiber? Warum Rea...

Verwendung des Linux-Lesebefehls

1. Befehlseinführung Der Lesebefehl ist ein integ...

So installieren Sie Nginx in Docker und konfigurieren den Zugriff über https

1. Laden Sie das neueste Nginx-Docker-Image herun...