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
s'exécute beaucoup plus rapidement qu'une requête avec un OFFSET plus grand :
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
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
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!