Optimierung der Leistung von Paging-Abfragen für MySQL mit mehreren zehn Millionen Daten

Optimierung der Leistung von Paging-Abfragen für MySQL mit mehreren zehn Millionen Daten

Wenn die Datenmenge in MySQL groß ist, wird die Seitenbegrenzung verwendet. Mit zunehmender Seitenzahl nimmt die Abfrageeffizienz ab.

Experiment

1. Verwenden Sie direkt die Paging-Anweisung „Limit Start, Count“:

select * from order limit start, count

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 * ab Bestelllimit 10, 20 0,016 Sekunden. Wählen Sie * ab Bestelllimit 100, 20 0,016 Sekunden. Wählen Sie * ab Bestelllimit 1000, 20 0,047 Sekunden. Wählen Sie * ab Bestelllimit 10000, 20 0,094 Sekunden.

Wir haben gesehen, dass mit zunehmender Anzahl der Startdatensätze auch die Zeit zunimmt. Dies zeigt, dass das Paging-Anweisungslimit eng mit der Startseitennummer zusammenhängt. Ändern wir also den Startdatensatz auf 40 W und sehen wir weiter.

select * from order limit 400000, 20 3.229秒

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

select * from order limit 800000, 20 37.44秒

Offensichtlich ist diese Zeit unerträglich.

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

1) Die Abfragezeit der Grenzwertanweisung ist proportional zur Position des Startdatensatzes

2) 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

Verwenden Sie den überdeckenden Index der Tabelle, um Paging-Abfragen zu beschleunigen

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:

select id from order limit 800000, 20 0.2秒

Im Vergleich zu den 37,44 Sekunden, die zum Abfragen aller Spalten benötigt werden, ist die Geschwindigkeit um mehr als das Hundertfache erhöht.

Wenn wir auch alle Spalten abfragen möchten, gibt es zwei Möglichkeiten: Eine ist das Formular „id>=“, die andere ist die Verwendung von „join“, siehe die tatsächliche Situation:

SELECT * FROM order WHERE ID > =(select id from order limit 800000, 1) limit 20

Die Abfragezeit beträgt 0,2 Sekunden, was ein qualitativer Sprung ist, haha

Eine andere Art zu schreiben

SELECT * FROM order a JOIN (select id from order limit 800000, 20) b ON a.ID = b.id

Auch die Abfragezeit ist sehr kurz

Das könnte Sie auch interessieren:
  • Techniken zur Optimierung von MySQL-Paging-Abfragen
  • Tutorial zur MySQL-Optimierung: Große Paging-Abfrage
  • MySQL-Paging-Abfragemethode für Millionen von Datenmengen und ihre Optimierungsvorschläge
  • MySQL-Lösung zur Datenpaging-Abfrageoptimierung auf Millionenebene
  • Detaillierte Erläuterung der Mysql Limit Paging-Abfrageoptimierung
  • Implementierung der MySQL-Abfrageoptimierung für große Seiten für Millionen von Daten

<<:  Detaillierte Erläuterung des adaptiven Anpassungsproblems des Vue-Mobilterminals

>>:  Detaillierte Erläuterung der Systemeingabe- und -ausgabeverwaltung in Linux

Artikel empfehlen

So deinstallieren und installieren Sie Tomcat neu (mit Bildern und Text)

Deinstallieren Sie tomcat9 1. Da die Installation...

Eine kurze Diskussion über allgemeine Operationen von MySQL in cmd und Python

Umgebungskonfiguration 1: Installieren Sie MySQL ...

Detaillierte Erklärung gängiger Docker Compose-Befehle

1. Die Verwendung von Docker Compose ist der Verw...

vue+element-ui implementiert die Kopfnavigationsleistenkomponente

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

Schreiben von Methoden, die in nativem JS verboten sein sollten

Inhaltsverzeichnis Funktionen auf Blockebene Ände...

Häufige CSS-Fehler und Lösungen

Code kopieren Der Code lautet wie folgt: Untersch...

CSS3 erzielt einen coolen 3D-Rotationsperspektiveneffekt

CSS3 erreicht coole 3D-Rotationsperspektive 3D-An...

HTML+CSS zum Erstellen von Herzschlag-Spezialeffekten

Heute werden wir einen einfachen Herzschlageffekt...

Ungewöhnliche, aber nützliche Tags in Xhtml

Xhtml hat viele Tags, die nicht häufig verwendet w...

So kommunizieren Sie mit anderen Benutzern über die Linux-Befehlszeile

Es ist ganz einfach, Nachrichten an andere Benutz...

Fallstudie zum Zusammenführen von JavaScript-Arrays

Methode 1: var a = [1,2,3]; var b=[4,5] a = a.con...