Heim > Datenbank > MySQL-Tutorial > Hauptteil

Beispiel für die gemeinsame Nutzung von SQL-Optimierungen, wenn der Offset während des MySQL-Pagings zu groß ist

小云云
Freigeben: 2017-12-25 11:16:37
Original
2092 Leute haben es durchsucht

Wenn wir den Inhalt in einer Liste anzeigen, treten unweigerlich Seitenprobleme auf, da die Menge des Inhalts in der Liste zwar groß sein kann, die Größe der Benutzeroberfläche, die Benutzer gleichzeitig sehen können, jedoch begrenzt ist, und das ist auch der Fall Da es unmöglich ist, den gesamten Inhalt auf einer Oberfläche anzuzeigen, führt das gleichzeitige Abrufen zu vieler Daten vom Backend zu zusätzlicher Belastung des Backends. MySQL-Paging ist eine Funktion, auf die wir in der Entwicklung häufig stoßen. Bei der Implementierung dieser Funktion ist in diesem Artikel hauptsächlich die SQL-Optimierungserfahrung beim MySQL-Paging beschrieben hat einen gewissen Referenz- und Lernwert für jedermanns Studium oder Arbeit. Freunde, die es benötigen, können dem Herausgeber folgen, um einen Blick darauf zu werfen.

Normalerweise wird bei der Durchführung von Paging-Abfragen eine solche Anweisung verwendet:

SELECT
*
FROM table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000
Nach dem Login kopieren

Wenn der Offset besonders groß ist, ist die Ausführungseffizienz dieser Anweisung geringer deutlich reduziert, und die Effizienz nimmt mit zunehmendem Offset ab.

Der Grund ist:

MySQL überspringt die Offset-Zeile nicht, sondern nimmt die Offset+N-Zeile und gibt dann die Offset-Zeile zurück Wenn vor der Rückgabe von N Zeilen der Offset besonders groß ist und die einzelnen Daten ebenfalls groß sind, müssen für jede Abfrage mehr Daten abgerufen werden, was natürlich sehr langsam ist.

Optimierungsplan:


SELECT
*
FROM table
JOIN
(select id from table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000)
as tmp using(id)
Nach dem Login kopieren

oder


SELECT a.* FROM table a, 
(select id from table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000) b 
where a.id = b.id
Nach dem Login kopieren

Erhalten Sie zuerst die Primärschlüsselliste und fragen Sie dann die Zieldaten über den Primärschlüssel ab. Selbst wenn der Offset groß ist, werden viele Primärschlüssel anstelle aller Felder abgerufen Relativ gesehen wird die Effizienz geringer sein. Eine große Verbesserung.

Verwandte Empfehlungen:

Zusammenfassung der MySQL-Optimierung – Gesamtzahl der Abfragen

Zusammenfassung häufig verwendeter SQL-Anweisungsabfragen zur MySQL-Optimierung Methoden

MySQL-Optimierung umfasst drei Aspekte

Das obige ist der detaillierte Inhalt vonBeispiel für die gemeinsame Nutzung von SQL-Optimierungen, wenn der Offset während des MySQL-Pagings zu groß ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage