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 ?

Pourquoi les performances des requêtes sont-elles dégradées avec des décalages LIMIT importants dans MySQL ?

Barbara Streisand
Libérer: 2024-12-20 20:19:20
original
820 Les gens l'ont consulté

Why is Query Performance Degraded with Large LIMIT Offsets in 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
Copier après la connexion

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
Copier après la connexion

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 :

  1. Stocker le dernier ID de l'ensemble de données précédent, par exemple, lastId = 530.
  2. Reformatez la requête comme suit :
SELECT * FROM large WHERE id > lastId LIMIT 0, 30
Copier après la connexion

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!

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