Verschlechterung der Abfrageleistung mit zunehmendem LIMIT-Offset
Datenbanken stoßen häufig auf Leistungsengpässe, wenn LIMIT mit einem Offset verwendet wird, insbesondere beim Umgang mit großen Tabellen. Dieses Problem tritt in MySQL besonders deutlich auf, wenn die LIMIT OFFSET-Klausel mit hohen Offset-Werten und ORDER BY verwendet wird.
Ein solches Beispiel ist eine Tabelle mit dem Namen „groß“ mit über 16 Millionen Datensätzen, die etwa 2 GB Speicherplatz belegt. Das Ausführen einer Abfrage mit einem niedrigen Offsetwert:
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
wird deutlich schneller abgeschlossen als eine ähnliche Abfrage mit einem höheren Offsetwert:
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
Obwohl beide Abfragen die gleiche Anzahl von Datensätzen abrufen ( 30) berücksichtigt der Overhead von ORDER BY nicht den Leistungsunterschied.
Optimierung Lösung
Um dieses Problem anzugehen und die Leistung zu verbessern, kann ein anderer Ansatz gewählt werden. Anstatt den Offset in einer Schleife zu erhöhen, um eine große Datenmenge zu sammeln, können wir die letzte ID des vorherigen Datensatzes behalten und der nachfolgenden Abfrage eine WHERE-Bedingung hinzufügen:
SELECT * FROM large WHERE id > lastId LIMIT 0, 30
Durch die Beibehaltung eines Null-Offsets und die Abfrage von Datensätzen über die letzte bekannte ID hinaus kann die Leistung drastisch verbessert werden.
Das obige ist der detaillierte Inhalt vonWarum wird die Abfrageleistung durch große LIMIT-Offsets in MySQL beeinträchtigt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!