Récupération de grandes sélections MySQL en morceaux
Face à de grandes requêtes MySQL SELECT dépassant des millions de lignes, il devient crucial d'optimiser les performances pour éviter erreurs de mémoire. Une approche efficace consiste à récupérer les données par morceaux, plutôt que d'essayer de récupérer l'intégralité de l'ensemble de données en une seule fois.
Pour y parvenir, vous pouvez utiliser la fonctionnalité LIMIT. En spécifiant la ligne de départ (décalage) et le nombre de lignes à récupérer (limite), vous pouvez récupérer les données dans des segments gérables. Par exemple, la requête suivante renvoie les 1 000 premières lignes :
<code class="sql">SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000</code>
Pour récupérer les morceaux suivants de 1 000 lignes, ajustez le décalage et la limite en conséquence :
<code class="sql">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</code>
Cependant, pour garantir que cohérence de vos données, il est recommandé de créer une table temporaire et de la remplir avec les résultats de la requête d'origine. Cela gèle les données dans le temps et empêche les modifications pendant le traitement. La table temporaire peut ensuite être interrogée par morceaux :
<code class="sql">CREATE TEMPORARY TABLE MyChunkedResult AS ( SELECT * FROM MyTable ORDER BY whatever ); -- retrieve row chunks SELECT * FROM MyChunkedResult LIMIT 0, 1000; SELECT * FROM MyChunkedResult LIMIT 1000,1000; SELECT * FROM MyChunkedResult LIMIT 2000,1000;</code>
Enfin, n'oubliez pas de supprimer la table temporaire une fois terminé pour éviter une utilisation inutile du stockage :
<code class="sql">DROP TEMPORARY TABLE MyChunkedResult;</code>
En mettant en œuvre cette approche, vous peut traiter efficacement de grandes sélections MySQL en morceaux, améliorant ainsi les performances et atténuant les problèmes de mémoire.
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!