Langsame Abfrageoptimierung für ORDER BY-Vorgänge
Wenn Sie bei der Verwendung von ORDER BY auf das Problem einer langsamen Abfrage stoßen, können Sie die folgenden Gründe in Betracht ziehen :
1. Index fehlt oder ist ungeeignet
Stellen Sie sicher, dass der Index für die von ORDER BY verwendete Spalte erstellt wurde. Wenn der Index nicht vorhanden oder nicht geeignet ist, muss die Datenbank einen vollständigen Tabellenscan durchführen, was die Leistung erheblich verringert.
2. Unterabfrageoptimierung
Überprüfen Sie die Optimierung verschachtelter Unterabfragen sorgfältig. Stellen Sie sicher, dass die Unterabfrage geeignete Indizes verwendet und in der WHERE-Klausel einen Gleichheitsvergleich (=) verwendet.
3. Verwenden Sie LIMIT entsprechend
Wenn die Abfrage nur eine kleine Anzahl von Ergebnissen zurückgeben muss, verwenden Sie die LIMIT-Klausel, um die Anzahl der zurückgegebenen Datensätze zu begrenzen. Dies kann die Leistung erheblich verbessern, insbesondere wenn ORDER BY auf große Datensätze angewendet wird.
Beispiel:
In einer bestimmten Abfrage kann die Leistung verbessert werden, indem die Unterabfrage in eine äußere Abfrage verschoben und daraus eine abgeleitete Tabelle gemacht wird:
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
Diese Optimierung erfolgt, weil die abgeleitete Tabelle vor der Ausführung der Abfrage vorberechnet wird, wodurch der Leistungsabfall vermieden wird, der auftritt, wenn ORDER BY auf eine Unterabfrage in der ursprünglichen Abfrage angewendet wird.
Das obige ist der detaillierte Inhalt vonWie kann ich langsame Abfragen mit ORDER BY optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!