Langsame Leistung bei Verwendung von ORDER BY in einer komplexen Abfrage
In einer komplexen Abfrage mit mehreren Joins und Unterabfragen kann das Hinzufügen einer ORDER BY-Klausel möglich sein zu deutlich langsameren Ausführungszeiten führen. Dieses Problem wurde in einer Abfrage gemeldet, die vier Tabellen enthält und nur 13 Zeilen zurückgibt. Die Abfrage wird ohne die ORDER BY-Klausel schnell ausgeführt, wird jedoch träge, wenn sie hinzugefügt wird.
Lösung
Um dieses Leistungsproblem zu beheben, wird empfohlen, die Abfrage einzuschließen eine Unterabfrage und wenden Sie die ORDER BY-Klausel auf die äußere Abfrage an. Hier ist die geänderte Abfrage:
SELECT * FROM ( SELECT Course.CourseID, Course.Description, UserCourse.UserID, UserCourse.TimeAllowed, UserCourse.CreatedOn, UserCourse.PassedOn, UserCourse.IssuedOn, C.LessonCnt FROM UserCourse INNER JOIN Course USING(CourseID) INNER JOIN ( SELECT CourseID, COUNT(*) AS LessonCnt FROM CourseSection GROUP BY CourseID ) C USING(CourseID) WHERE UserCourse.UserID = 8810 ) ORDER BY CourseID;
Erklärung
Der Grund, warum diese Lösung funktioniert, besteht darin, dass sie dem Optimierer ermöglicht, die Unterabfrage unabhängig von der ORDER BY-Operation auszuwerten. Dies führt zu einem effizienteren Ausführungsplan, der nicht durch den langsamen ORDER BY-Vorgang beeinträchtigt wird.
Das obige ist der detaillierte Inhalt vonWarum ist meine SQL-Abfrage mit ORDER BY langsam und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!