Maison >base de données >tutoriel mysql >Pourquoi les performances des requêtes sont-elles dégradées avec des décalages LIMIT importants dans MySQL ?
Dégradation des performances des requêtes avec augmentation du décalage LIMIT
Les bases de données rencontrent souvent des goulots d'étranglement en termes de performances lors de l'utilisation de LIMIT avec un décalage, en particulier lorsqu'il s'agit de tables volumineuses. Ce problème est particulièrement évident dans MySQL lors de l'utilisation de la clause LIMIT OFFSET avec des valeurs de décalage élevées et ORDER BY.
Un tel exemple est une table nommée « large » avec plus de 16 millions d'enregistrements, occupant environ 2 Go d'espace de stockage. Exécution d'une requête avec une valeur de décalage faible :
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
se termine beaucoup plus rapidement par rapport à une requête similaire avec un décalage plus élevé :
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
Bien que les deux requêtes récupèrent le même nombre d'enregistrements ( 30), la surcharge de ORDER BY ne tient pas compte de la différence de performances.
Optimisation Solution
Pour résoudre ce problème et améliorer les performances, une approche différente peut être adoptée. Au lieu d'incrémenter le décalage dans une boucle pour collecter une grande quantité de données, nous pouvons conserver le dernier ID de l'ensemble de données précédent et ajouter une condition WHERE à la requête suivante :
SELECT * FROM large WHERE id > lastId LIMIT 0, 30
En maintenant un décalage zéro et en recherchant des enregistrements au-delà du dernier ID connu, les performances peuvent être considérablement améliorées.
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!