首页 > 数据库 > mysql教程 > SQLAlchemy 的 `yield_per()` 是否真正为大型 MySQL 查询提供内存高效的迭代?

SQLAlchemy 的 `yield_per()` 是否真正为大型 MySQL 查询提供内存高效的迭代?

Linda Hamilton
发布: 2024-12-02 06:39:13
原创
142 人浏览过

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

SQLAlchemy 的内置生成器是否提供内存高效迭代?

在使用 SQLAlchemy 时,对数据的相当大部分进行大量查询MySQL表可能会遇到内存消耗过多的情况。尽管假设内置生成器将以小块的形式获取数据,但这个问题仍然存在。为了缓解这种情况,用户求助于创建自定义迭代器。

但是,对 SQLAlchemy 行为的仔细检查表明,大多数 DBAPI 实现都会在检索时缓冲行,从而导致甚至在 SQLAlchemy ORM 处理结果之前就消耗内存。此外,Query 的默认操作是在将对象返回给用户之前完全加载结果集。

对于复杂查询,确保结果的完整性证明了此行为的合理性。但是,对于简单的 SELECT 语句,Query 提供了 Yield_per() 选项来修改此功能,从而可以批量生成行。使用yield_per() 时务必谨慎,因为它需要对应用程序有深入的了解,并且在底层 DBAPI 预缓冲行的情况下效果较差。

更有效的方法是利用窗口函数。通过预取一组代表数据块的“窗口”值,用户可以生成针对特定窗口的单独 SELECT 语句。此方法避免了 OFFSET 和 LIMIT 的限制,这些限制会导致性能随着 OFFSET 值的增加而下降。

为了获得最大效率,请考虑使用 PostgreSQL、Oracle 或 SQL Server,因为这些数据库支持窗口函数。

以上是SQLAlchemy 的 `yield_per()` 是否真正为大型 MySQL 查询提供内存高效的迭代?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板