Maison > base de données > tutoriel mysql > Pourquoi ma requête MySQL avec ORDER BY est-elle si lente ?

Pourquoi ma requête MySQL avec ORDER BY est-elle si lente ?

Susan Sarandon
Libérer: 2024-12-05 17:04:11
original
235 Les gens l'ont consulté

Why is my MySQL query with ORDER BY so slow?

Ralentissement des requêtes avec la clause ORDER BY

Les utilisateurs de bases de données MySQL ont rencontré un problème de performances déroutant lié à l'utilisation de la clause ORDER BY. Lorsqu'elle est ajoutée à une requête complexe comportant plusieurs jointures et sous-requêtes, le temps d'exécution de la requête augmente considérablement, passant de quelques millisecondes à 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 la plus grande table. Sans la clause ORDER BY, la requête s'exécute 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 jusqu'à 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 ORDER BY est ajoutée, l'optimiseur calcule mal la taille de la table temporaire nécessaire et alloue une quantité de mémoire insuffisante. Par conséquent, la requête retombe sur un algorithme de tri moins efficace, ce qui entraîne le ralentissement observé.

Une solution de contournement possible consiste à réécrire la requête à l'aide d'une sous-requête corrélée ou d'un CTE (Common Table Expression) pour spécifier explicitement le étape de tri. Cela permet à l'optimiseur d'estimer correctement la taille de la table temporaire, évitant ainsi le ralentissement.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal