Heim >Datenbank >MySQL-Tutorial >Warum sind hohe LIMIT OFFSET-Werte in MySQL-Abfragen so langsam?
Auswirkungen eines höheren LIMIT OFFSET auf die MySQL-Abfrageleistung
Beim Ausführen einer SELECT-Abfrage mit einer LIMIT-Klausel und einer großen Tabelle wird ein hoher Wert festgelegt Der Offsetwert kann die Ausführungszeit der Abfrage drastisch verlangsamen. Dieses Verhalten macht sich besonders bemerkbar, wenn die ORDER BY-Klausel mit dem Primärschlüssel verwendet wird.
Stellen Sie sich beispielsweise eine Tabelle namens „groß“ mit über 16 Millionen Datensätzen (2 GB groß) vor. Eine Abfrage wie die folgende:
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
kann viel schneller ausgeführt werden als eine Abfrage mit einem höheren Offset, wie zum Beispiel:
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
Beide Abfragen rufen die gleiche Anzahl von Datensätzen ab (30 ), was darauf hinweist, dass der Leistungsunterschied nicht auf den Overhead der ORDER BY-Operation zurückzuführen ist.
Um die Abfrage zu optimieren, wird empfohlen, die Verwendung hoher LIMIT-Offsets zu minimieren. Erwägen Sie stattdessen die Verwendung einer WHERE-Klausel, um Datensätze basierend auf einem bekannten Bezeichner auszuwählen, was zu einem Null-Offset führt.
Wenn das Ziel beispielsweise darin besteht, die letzten 30 Zeilen abzurufen, kann die folgende Abfrage verwendet werden :
SELECT * FROM large WHERE id > last_known_id LIMIT 0, 30
Durch die Pflege eines Datensatzes der letzten bekannten ID (last_known_id) ermöglicht dieser Ansatz, dass die Abfrage immer bei einem Offset von Null beginnt, was die Leistung erheblich verbessert.
Das obige ist der detaillierte Inhalt vonWarum sind hohe LIMIT OFFSET-Werte in MySQL-Abfragen so langsam?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!