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 ?

Dec 18, 2024 am 04:01 AM

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!

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

Article chaud

Musée de deux points: Guide de localisation de Bungle Wasteland
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds Tags

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Réduisez l'utilisation de la mémoire MySQL dans Docker Réduisez l'utilisation de la mémoire MySQL dans Docker Mar 04, 2025 pm 03:52 PM

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

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE? Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE? Mar 19, 2025 pm 03:51 PM

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 Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée Mar 04, 2025 pm 04:01 PM

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écutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin) Mar 04, 2025 pm 03:54 PM

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

Qu'est-ce que Sqlite? Aperçu complet Qu'est-ce que Sqlite? Aperçu complet Mar 04, 2025 pm 03:55 PM

Qu'est-ce que Sqlite? Aperçu complet

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape Mar 04, 2025 pm 03:49 PM

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 sécuriser MySQL contre les vulnérabilités communes (injection SQL, attaques par force brute)? Mar 18, 2025 pm 12:00 PM

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? Comment configurer le cryptage SSL / TLS pour les connexions MySQL? Mar 18, 2025 pm 12:01 PM

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

See all articles