ralentissement des requêtes avec l'ordre par clause
Les utilisateurs de la base de données MySQL ont rencontré un problème de performance déroutant lié à l'utilisation de la clause Order By. Lorsqu'elle est ajoutée à une requête complexe avec plusieurs jointures et sous-requêtes, le temps d'exécution de la requête augmente considérablement de la milliseconde à quelques secondes.
Une instance spécifique implique une requête qui récupère les données de trois tables avec environ 40 000 lignes dans le plus grand tableau. Sans la clause Order Order by, la requête fonctionne de manière optimale. Cependant, lorsqu'une colonne est utilisée comme critère de tri, la requête ralentit de plusieurs ordres de grandeur à environ 10 secondes.
La cause première de ce problème réside dans le mécanisme d'optimisation de la base de données. Par défaut, MySQL tente d'optimiser les requêtes en créant des tables temporaires ou en utilisant des sous-requêtes. Lorsqu'une clause de commande par ordre, l'optimiseur est à cas de calcul de la taille du tableau temporaire nécessaire et alloue une quantité insuffisante de mémoire. Par conséquent, la requête retombe à un algorithme de tri moins efficace, ce qui entraîne le ralentissement observé.
Une solution de contournement possible consiste à réécrire la requête en utilisant une sous-requête corrélée ou une CTE (expression de table commune) pour spécifier explicitement l'étape de tri. Cela permet à l'optimiseur d'estimer correctement la taille temporaire de la table, empêchant le ralentissement.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3