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;
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;
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!