Dégradation des performances des requêtes avec des valeurs de décalage élevées dans MySQL
L'exécution lente des requêtes est souvent attribuée à une utilisation excessive du processeur ou à une consommation de mémoire. Cependant, dans certains cas, même une requête apparemment anodine avec un décalage LIMIT élevé peut entraîner des goulots d'étranglement importants en termes de performances.
Le problème : l'augmentation du décalage a un impact sur la vitesse des requêtes
Considérez un scénario avec une grande table contenant plus de 16 millions d'enregistrements. Une requête telle que :
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
s'exécute considérablement plus rapidement que :
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
Les deux requêtes récupèrent le même nombre d'enregistrements, mais la valeur de décalage de 10 000 dans cette dernière requête dégrade les performances.
Comprendre le problème
MySQL utilise l'index analyses ou analyses de table complète lors de la récupération des données. Lorsqu'une valeur de décalage est appliquée, MySQL doit analyser une partie de la table pour récupérer le point de départ du jeu de résultats. À mesure que la valeur de décalage augmente, l'analyse de la table devient plus étendue, ce qui entraîne des temps d'exécution plus longs.
Solution d'optimisation : évitez les valeurs de décalage élevées
Pour optimiser de telles requêtes, évitez en utilisant des valeurs OFFSET élevées. Envisagez plutôt d'utiliser des approches alternatives :
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!