Heim >Datenbank >MySQL-Tutorial >Warum wird die Abfrageleistung durch große LIMIT-Offsets in MySQL beeinträchtigt?

Warum wird die Abfrageleistung durch große LIMIT-Offsets in MySQL beeinträchtigt?

Barbara Streisand
Barbara StreisandOriginal
2024-12-20 20:19:20823Durchsuche

Why is Query Performance Degraded with Large LIMIT Offsets in MySQL?

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:

  1. Speichern Sie die letzte ID des vorherigen Datensatzes, z. B. lastId = 530.
  2. Formatieren Sie die Abfrage neu als folgt:
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!

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