Maison > base de données > tutoriel mysql > Pourquoi les valeurs OFFSET élevées dans les requêtes MySQL sont-elles si lentes ?

Pourquoi les valeurs OFFSET élevées dans les requêtes MySQL sont-elles si lentes ?

Barbara Streisand
Libérer: 2024-12-18 04:01:09
original
780 Les gens l'ont consulté

Why Are High OFFSET Values in MySQL Queries So Slow?

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

s'exécute considérablement plus rapidement que :

SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
Copier après la connexion

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 :

  1. 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.
  2. 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!

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