Heim  >  Artikel  >  Datenbank  >  MySQL zig Millionen Daten-Paging-Abfrageleistungsoptimierung_Mysql

MySQL zig Millionen Daten-Paging-Abfrageleistungsoptimierung_Mysql

小云云
小云云Original
2017-12-08 09:22:002347Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn