Verwenden Sie Limit-Paging, wenn die Menge an MySQL-Daten groß ist. Mit zunehmender Seitenzahl wird die Abfrageeffizienz geringer. Dieser Artikel teilt Ihnen die Leistungsoptimierungsmethode des Autors bei der Verwendung von MySQL zur Durchführung von Paging-Abfragen mit zig Millionen Daten mit. Es ist ein sehr guter Artikel und ich hoffe, er kann allen helfen.
Experiment
1. Verwenden Sie direkt „Limit Start, Count Paging“-Anweisungen:
select * from order limit start, count
Wenn die Startseite klein ist, hat die Abfrage keine Leistung Frage, schauen wir uns die Ausführungszeit des Paging ab 10, 100, 1000, 10000 (20 Elemente pro Seite) wie folgt an:
select * from order limit 10, 20 0.016秒 select * from order limit 100, 20 0.016秒 select * from order limit 1000, 20 0.047秒 select * from order limit 10000, 20 0.094秒
Wir haben gesehen, dass mit zunehmendem Startrekord auch die Zeit zunimmt. Dies zeigt, dass das Paging-Anweisungslimit eng mit der Startseitenzahl zusammenhängt. Ändern wir also den Startrekord auf 40 W und schauen wir uns das an
select * from order limit 400000, 20 3.229秒
Sehen Sie sich die Zeit an, die wir gebraucht haben, um die letzte Seite mit Datensätzen zu bekommen
select * from order limit 800000, 20 37.44秒
Natürlich ist diese Art von Zeit unerträglich.
Daraus können wir auch zwei Dinge schließen:
1) Die Abfragezeit der Limit-Anweisung ist proportional zur Position des Startdatensatzes
2) Die Limit-Anweisung von MySQL ist Es ist sehr praktisch, eignet sich jedoch nicht für die direkte Verwendung in Tabellen mit vielen Datensätzen.
2. Leistungsoptimierungsmethode für das Limit-Paging-Problem
Verwenden Sie den abdeckenden Index der Tabelle, um die Paging-Abfrage zu beschleunigen
Wir alle wissen, dass die Anweisung nur eine Indexabfrage verwendet Wenn diese Indexspalte (abdeckender Index) enthalten ist, ist die Abfrage in diesem Fall schneller.
Da es einen Optimierungsalgorithmus für die Indexsuche gibt und sich die Daten im Abfrageindex befinden, ist es nicht erforderlich, die relevante Datenadresse zu finden, was viel Zeit spart. Darüber hinaus gibt es in MySQL auch einen zugehörigen Index-Cache. Es ist besser, den Cache zu verwenden, wenn die Parallelität hoch ist.
In unserem Beispiel wissen wir, dass das ID-Feld der Primärschlüssel ist, daher enthält es natürlich den Standard-Primärschlüsselindex. Sehen wir uns nun an, wie die Abfrage mit dem Covering-Index funktioniert:
Dieses Mal fragen wir die Daten auf der letzten Seite (mit dem Covering-Index, die nur die ID-Spalte enthält) wie folgt ab:
select id from order limit 800000, 20 0.2秒
Im Vergleich zu den 37,44 Sekunden für die Abfrage aller Spalten erhöht sich die Geschwindigkeit um etwa das Hundertfache
Wenn wir dann auch alle Spalten abfragen möchten, gibt es zwei Methoden, eine davon id> ;= Formular, das andere ist die Verwendung von Join, schauen Sie sich die tatsächliche Situation an:
SELECT * FROM order WHERE ID > =(select id from order limit 800000, 1) limit 20
Die Abfragezeit beträgt 0,2 Sekunden, was einen qualitativen Sprung darstellt, haha
Andere Schreibweise
SELECT * FROM order a JOIN (select id from order limit 800000, 20) b ON a.ID = b.id
Auch die Abfragezeit ist sehr kurz.
Hast du es schon gelernt? Beeilen Sie sich und probieren Sie es aus.
Verwandte Empfehlungen:
MySQL zig Millionen Datenabfragen
Mysql zig Millionen Zählstatistiken Vergleich_MySQL
MySQL-Million-Level-Paging-Optimierung (MySQL-Million-Level-Fast-Paging)_MySQL
Das obige ist der detaillierte Inhalt vonMySQL zig Millionen Daten-Paging-Abfrageleistungsoptimierung_Mysql. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!