Maison > base de données > tutoriel mysql > Pourquoi mon instruction MySQL SELECT avec ORDER BY et LIMIT est-elle lente sur un grand ensemble de données, et comment puis-je l'accélérer ?

Pourquoi mon instruction MySQL SELECT avec ORDER BY et LIMIT est-elle lente sur un grand ensemble de données, et comment puis-je l'accélérer ?

Linda Hamilton
Libérer: 2024-11-18 05:09:02
original
221 Les gens l'ont consulté

Why is my MySQL SELECT statement with ORDER BY and LIMIT slow on a large dataset, and how can I speed it up?

L'instruction MySQL s'exécute lentement avec un grand ensemble de données

Lorsque vous travaillez avec de grandes bases de données, le temps d'exécution des requêtes peut devenir un problème. Cet article traite d'un scénario spécifique dans lequel une requête sur une table contenant plus d'un million d'enregistrements prend plus d'une minute à s'exécuter.

Le problème

La requête suivante prenait le relais une minute à exécuter, même avec une colonne "id" indexée :

SELECT *
FROM `ratings`
ORDER BY id
LIMIT 499500, 500;
Copier après la connexion

La table contenait environ un million d'enregistrements, et la requête impliquait un classement par colonne "id" et limiter les résultats à une plage spécifique.

Analyse et solution

Après avoir étudié la structure de la requête et de la table, il a été déterminé que le temps d'exécution lent était dû à l'utilisation d'une opération de "tri de fichiers". Cela se produit lorsque MySQL ne trouve pas d'index approprié à utiliser pour la clause ORDER BY et doit trier les lignes du tableau en mémoire.

Pour résoudre ce problème, il a été recommandé d'utiliser une clause WHERE plus sélective au lieu de la clause WHERE. Clause ORDER BY. Dans ce cas, la requête suivante s'est exécutée beaucoup plus rapidement :

SELECT *
FROM `ratings`
WHERE id >= 499501
LIMIT 500;
Copier après la connexion

Cette requête a utilisé la colonne indexée "id" pour affiner les lignes à trier, réduisant ainsi considérablement le temps nécessaire à l'exécution de la requête.

Considérations supplémentaires

Il est important de noter que l'utilisation d'une clause WHERE au lieu d'une clause ORDER BY n'est pas toujours possible ou pratique. Dans de tels cas, d'autres optimisations telles que la création d'index supplémentaires ou l'optimisation de la structure de la base de données peuvent être nécessaires. De plus, les blocages potentiels doivent également être exclus comme cause possible de ralentissement des performances.

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