Verlangsamung von Abfragen mit der ORDER BY-Klausel
MySQL-Datenbankbenutzer sind auf ein rätselhaftes Leistungsproblem im Zusammenhang mit der Verwendung der ORDER BY-Klausel gestoßen. Wenn sie zu einer komplexen Abfrage mit mehreren Verknüpfungen und Unterabfragen hinzugefügt wird, erhöht sich die Ausführungszeit der Abfrage erheblich von Millisekunden auf Sekunden.
Bei einer bestimmten Instanz handelt es sich um eine Abfrage, die Daten aus drei Tabellen mit etwa 40.000 Zeilen in der größten Tabelle abruft. Ohne die ORDER BY-Klausel wird die Abfrage optimal ausgeführt. Wenn jedoch eine beliebige Spalte als Sortierkriterium verwendet wird, verlangsamt sich die Abfrage um mehrere Größenordnungen auf etwa 10 Sekunden.
Die Hauptursache für dieses Problem liegt im Optimierungsmechanismus der Datenbank. Standardmäßig versucht MySQL, Abfragen durch die Erstellung temporärer Tabellen oder die Verwendung von Unterabfragen zu optimieren. Wenn eine ORDER BY-Klausel hinzugefügt wird, berechnet der Optimierer die Größe der benötigten temporären Tabelle falsch und weist nicht genügend Speicher zu. Folglich greift die Abfrage auf einen weniger effizienten Sortieralgorithmus zurück, was zu der beobachteten Verlangsamung führt.
Eine mögliche Problemumgehung besteht darin, die Abfrage mithilfe einer korrelierten Unterabfrage oder eines CTE (Common Table Expression) neu zu schreiben, um die explizit anzugeben Sortierschritt. Dadurch kann der Optimierer die Größe der temporären Tabelle korrekt einschätzen und so eine Verlangsamung verhindern.
Das obige ist der detaillierte Inhalt vonWarum ist meine MySQL-Abfrage mit ORDER BY so langsam?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!