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

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

小云云
小云云Original
2017-12-25 11:16:372088Durchsuche

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

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)

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

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!

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