"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment récupérer efficacement de grands ensembles de données à partir de MySQL en morceaux ?

Comment récupérer efficacement de grands ensembles de données à partir de MySQL en morceaux ?

Publié le 2024-11-08
Parcourir:438

How to Efficiently Retrieve Large Datasets from MySQL in Chunks?

Récupération de données volumineuses à partir de MySQL en morceaux pour des performances améliorées

Lorsque vous traitez des sélections MySQL importantes avec des millions de lignes, des problèmes de contraintes de mémoire peuvent survenir lors de la récupération des données. Cet article explore une solution à ce défi en utilisant la fonctionnalité LIMIT pour récupérer les données en morceaux gérables.

Pour récupérer de grands ensembles de données de manière itérative, la fonctionnalité LIMIT peut être utilisée. En spécifiant une ligne de départ et un nombre maximum de lignes à récupérer, nous pouvons diviser le processus de sélection en sous-ensembles plus petits. Par exemple, l'exécution de la requête suivante :

SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000

récupérera les 1 000 premières lignes. Pour récupérer des ensembles suivants de 1 000 lignes, nous pouvons émettre des requêtes similaires avec des valeurs LIMIT ajustées, telles que :

SELECT * FROM MyTable ORDER BY whatever LIMIT 1000,1000 -- rows 1,001 - 2,000
SELECT * FROM MyTable ORDER BY whatever LIMIT 2000,1000 -- rows 2,001 - 3,000

Cependant, cette approche ne garantit pas un ordre cohérent des lignes en raison de changements potentiels dans la table pendant le processus de récupération. Pour résoudre ce problème, nous pouvons d'abord créer une table temporaire et la remplir avec les résultats ordonnés :

CREATE TEMPORARY TABLE MyChunkedResult AS (
  SELECT *
  FROM MyTable
  ORDER BY whatever
);

Cela garantit que l'ordre des lignes reste intact pendant que nous les récupérons en morceaux :

SELECT * FROM MyChunkedResult LIMIT 0, 1000;
SELECT * FROM MyChunkedResult LIMIT 1000,1000;
SELECT * FROM MyChunkedResult LIMIT 2000,1000;
.. and so on.

Pour déterminer la ligne de départ appropriée pour chaque morceau et vérifier la fin des résultats, une logique personnalisée peut être implémentée. Il est recommandé d'utiliser des tailles de fragments nettement supérieures à 1 000 enregistrements pour optimiser les performances.

Une fois la récupération des données terminée, il est conseillé de supprimer la table temporaire pour la gestion des ressources :

DROP TEMPORARY TABLE MyChunkedResult;

L'adoption de cette approche de récupération fragmentée améliore considérablement les performances et permet l'extraction réussie de grands ensembles de données MySQL.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3