Maison > base de données > tutoriel mysql > Comment le OFFSET de MySQL dans les requêtes LIMIT affecte-t-il les performances et comment peut-il être optimisé ?

Comment le OFFSET de MySQL dans les requêtes LIMIT affecte-t-il les performances et comment peut-il être optimisé ?

Mary-Kate Olsen
Libérer: 2024-12-17 14:04:21
original
506 Les gens l'ont consulté

How Does MySQL's OFFSET in LIMIT Queries Affect Performance, and How Can It Be Optimized?

Impact de OFFSET dans les requêtes MySQL LIMIT sur les performances des requêtes

Lorsque vous travaillez avec de grands ensembles de données dans MySQL, l'utilisation de LIMIT avec un OFFSET peut avoir un impact significatif performances des requêtes. Cela est particulièrement évident lors de l’utilisation de PRIMARY KEY comme critère ORDER BY. Par exemple, la requête suivante avec un OFFSET plus petit :

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

s'exécute beaucoup plus rapidement qu'une requête avec un OFFSET plus grand :

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

Cela est vrai même si les deux requêtes récupèrent le même nombre d'enregistrements (30).

Comprendre l'impact d'OFFSET

Pour Pour comprendre ce phénomène, nous devons examiner le plan d'exécution des requêtes de MySQL. Lors de l'utilisation de ORDER BY avec un OFFSET, MySQL doit d'abord trier la table entière selon les critères spécifiés. Il ignore ensuite le nombre d'enregistrements spécifié (OFFSET) et récupère le nombre d'enregistrements souhaité (LIMIT). Ce processus de tri devient de plus en plus coûteux à mesure que le OFFSET augmente et que la taille de la table augmente.

Technique d'optimisation

Pour optimiser de telles requêtes, il est conseillé d'utiliser une méthode basée sur la plage approche de récupération plutôt que de compter uniquement sur OFFSET. Ceci peut être réalisé en conservant l'ID du dernier enregistrement de la récupération précédente et en ajoutant une condition WHERE :

WHERE id > lastId LIMIT 0, 30
Copier après la connexion

En maintenant un OFFSET nul et en récupérant les enregistrements en fonction du dernier ID de l'ensemble précédent, nous éliminons efficacement le coûteux opération de tri. Par conséquent, les performances des requêtes s'amélioreront considérablement, en particulier pour les grandes tables.

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