


Pourquoi les valeurs OFFSET élevées dans les requêtes MySQL sont-elles si lentes ?
Dec 18, 2024 am 04:01 AMDé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 :
- Utilisez des requêtes incrémentielles : Au lieu d'incrémenter le OFFSET d'une valeur fixe, conservez le dernier ID récupéré et utilisez-le comme point de départ pour le prochaine requête. Cette approche élimine le besoin d'une analyse de table et améliore considérablement les performances.
- Implémenter la pagination : Divisez l'ensemble de résultats en pages d'une taille gérable. Chaque page peut être récupérée en utilisant une valeur OFFSET nulle, garantissant des performances optimales.
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!

Outils chauds Tags

Article chaud

Outils chauds Tags

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Comment sécuriser MySQL contre les vulnérabilités communes (injection SQL, attaques par force brute)?

Comment configurer le cryptage SSL / TLS pour les connexions MySQL?
