Optimisation lente des requêtes pour les opérations ORDER BY
Lorsque vous rencontrez le problème de requête lente lors de l'utilisation de ORDER BY, vous pouvez considérer les raisons suivantes :
1. L'index est manquant ou inapproprié
Assurez-vous que l'index a été créé pour la colonne utilisée par ORDER BY. Si l'index n'existe pas ou n'est pas adapté, la base de données sera obligée d'effectuer une analyse complète de la table, réduisant considérablement les performances.
2. Optimisation des sous-requêtes
Vérifiez attentivement l'optimisation des sous-requêtes imbriquées. Assurez-vous que la sous-requête utilise les index appropriés et utilise la comparaison d'égalité (=) dans la clause WHERE.
3. Utilisez LIMIT de manière appropriée
Si la requête ne doit renvoyer qu'un petit nombre de résultats, utilisez la clause LIMIT pour limiter le nombre d'enregistrements renvoyés. Cela peut améliorer considérablement les performances, en particulier lorsque ORDER BY est appliqué à de grands ensembles de données.
Exemple :
Dans une requête donnée, les performances peuvent être améliorées en déplaçant la sous-requête vers une requête externe, ce qui en fait une table dérivé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
Cette optimisation se produit car la table dérivée est pré-calculée avant l'exécution de la requête, évitant ainsi la dégradation des performances qui se produit lorsque ORDER BY est appliqué à une sous-requête dans la requête d'origine.
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!