Maison > base de données > tutoriel mysql > `yield_per()` de SQLAlchemy offre-t-il vraiment une itération économe en mémoire pour les grandes requêtes MySQL ?

`yield_per()` de SQLAlchemy offre-t-il vraiment une itération économe en mémoire pour les grandes requêtes MySQL ?

Linda Hamilton
Libérer: 2024-12-02 06:39:13
original
146 Les gens l'ont consulté

Does SQLAlchemy's `yield_per()` Truly Offer Memory-Efficient Iteration for Large MySQL Queries?

Le générateur intégré de SQLAlchemy offre-t-il une itération efficace en mémoire ?

En utilisant SQLAlchemy, un grand nombre de requêtes sur des parties importantes d'un La table MySQL peut rencontrer une consommation de mémoire excessive. Ce problème persiste malgré l’hypothèse selon laquelle un générateur intégré récupérerait les données en petits morceaux. Pour atténuer ce problème, les utilisateurs ont eu recours à la création d'itérateurs personnalisés.

Cependant, un examen plus approfondi du comportement de SQLAlchemy révèle que la plupart des implémentations de DBAPI mettent en mémoire tampon les lignes lors de la récupération, ce qui entraîne une consommation de mémoire avant même que l'ORM SQLAlchemy ne traite les résultats. . De plus, l'opération par défaut de Query consiste à charger complètement l'ensemble de résultats avant de renvoyer les objets à l'utilisateur.

Pour les requêtes complexes, garantir l'intégrité des résultats justifie ce comportement. Cependant, pour les instructions SELECT simples, Query propose l'option rendement_per() pour modifier cette fonctionnalité, permettant ainsi la génération de lignes par lots. Il est crucial de faire preuve de prudence lors de l'utilisation de rendement_per(), car cela nécessite une compréhension avancée de l'application et est moins efficace dans les cas où la DBAPI sous-jacente pré-tamponne les lignes.

Une approche plus efficace implique l'utilisation de fonctions de fenêtre. En pré-récupérant un ensemble de valeurs de « fenêtre » qui représentent des blocs de données, les utilisateurs peuvent générer des instructions SELECT individuelles qui ciblent des fenêtres spécifiques. Cette méthode évite les limitations de OFFSET et LIMIT, qui entraînent une dégradation des performances avec l'augmentation des valeurs OFFSET.

Pour une efficacité maximale, envisagez d'utiliser PostgreSQL, Oracle ou SQL Server, car ces bases de données prennent en charge les fonctions de fenêtre.

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