Performances lentes lors de l'utilisation de ORDER BY dans une requête complexe
Dans une requête complexe avec plusieurs jointures et sous-requêtes, l'ajout d'une clause ORDER BY peut conduire à des temps d’exécution considérablement plus lents. Ce problème a été signalé dans une requête contenant quatre tables et renvoyant seulement 13 lignes. La requête s'exécute rapidement sans la clause ORDER BY mais devient lente lorsqu'elle est ajoutée.
Solution
Pour résoudre ce problème de performances, il est recommandé d'envelopper la requête dans une sous-requête et appliquez la clause ORDER BY à la requête externe. Voici la requête modifiée :
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;
Explication
La raison pour laquelle cette solution fonctionne est qu'elle permet à l'optimiseur d'évaluer la sous-requête indépendamment de l'opération ORDER BY. Il en résulte un plan d'exécution plus efficace qui n'est pas affecté par la lente opération ORDER BY.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!