Heim > Datenbank > MySQL-Tutorial > Warum ist meine MySQL SELECT-Anweisung mit ORDER BY und LIMIT bei einem großen Datensatz langsam und wie kann ich sie beschleunigen?

Warum ist meine MySQL SELECT-Anweisung mit ORDER BY und LIMIT bei einem großen Datensatz langsam und wie kann ich sie beschleunigen?

Linda Hamilton
Freigeben: 2024-11-18 05:09:02
Original
221 Leute haben es durchsucht

Why is my MySQL SELECT statement with ORDER BY and LIMIT slow on a large dataset, and how can I speed it up?

MySQL-Anweisung wird bei einem großen Datensatz langsam ausgeführt

Bei der Arbeit mit großen Datenbanken kann die Ausführungszeit von Abfragen zu einem Problem werden. In diesem Artikel wird ein spezifisches Szenario beschrieben, bei dem die Ausführung einer Abfrage für eine Tabelle mit über einer Million Datensätzen mehr als eine Minute dauert.

Das Problem

Die folgende Abfrage übernahm die Oberhand Die Ausführung dauerte eine Minute, selbst mit einer indizierten „id“-Spalte:

SELECT *
FROM `ratings`
ORDER BY id
LIMIT 499500, 500;
Nach dem Login kopieren

Die Tabelle enthielt etwa eine Million Datensätze, und die Abfrage umfasste die Sortierung nach der „id“-Spalte und die Beschränkung der Ergebnisse auf einen bestimmten Bereich .

Analyse und Lösung

Nach der Untersuchung der Abfrage- und Tabellenstruktur wurde festgestellt, dass die langsame Ausführungszeit auf die Verwendung einer „Filesort“-Operation zurückzuführen war. Dies tritt auf, wenn MySQL keinen geeigneten Index für die ORDER BY-Klausel finden kann und die Tabellenzeilen im Speicher sortieren muss.

Um dieses Problem zu lösen, wurde empfohlen, anstelle der Klausel eine selektivere WHERE-Klausel zu verwenden ORDER BY-Klausel. In diesem Fall wurde die folgende Abfrage viel schneller ausgeführt:

SELECT *
FROM `ratings`
WHERE id >= 499501
LIMIT 500;
Nach dem Login kopieren

Diese Abfrage nutzte die indizierte „id“-Spalte, um die zu sortierenden Zeilen einzugrenzen, wodurch die für die Ausführung der Abfrage erforderliche Zeit erheblich verkürzt wurde.

Zusätzliche Überlegungen

Es ist wichtig zu beachten, dass die Verwendung einer WHERE-Klausel anstelle einer ORDER BY-Klausel möglicherweise nicht immer möglich oder praktikabel ist. In solchen Fällen können weitere Optimierungen wie die Erstellung zusätzlicher Indizes oder die Optimierung der Datenbankstruktur erforderlich sein. Darüber hinaus sollten potenzielle Deadlocks als mögliche Ursache für langsame Leistung ausgeschlossen werden.

Das obige ist der detaillierte Inhalt vonWarum ist meine MySQL SELECT-Anweisung mit ORDER BY und LIMIT bei einem großen Datensatz langsam und wie kann ich sie beschleunigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage