gpt4 book ai didi

java - hibernate 可滚动结果立即获取mysql中的所有行

转载 作者:行者123 更新时间:2023-11-30 21:21:42 31 4
gpt4 key购买 nike

我们的应用程序可能会运行在多个数据库上,具体取决于客户的基础设施。我们使用 Hibernate orm,因此我们可以在各种 RDBMS 上部署我们的应用程序。

我们注意到在所有使用 MySql 数据库的环境中,我们都存在异常的内存消耗。

分析我们发现使用可滚动结果时出现的问题。与其他环境(SQL 服务器、Oracle 等)相反,它看起来像 MySql 中的可滚动结果会立即获取所有查询结果。

据我所知,我在 Oracle 和 SQL Server 中看到,当您使用可滚动结果时,游标会打开,并且只有在调用 next() 方法时才会从 DB 服务器获取行.我们所有的游标都是`FORWARD_ONLY。

我认为原因是 MySql-jdbc-connector 没有正确处理可滚动结果。那是对的吗?我可以让滚动结果在 MySql 上正常工作吗?而且,如果是,如何?在此先感谢任何人

最佳答案

是的,显然 MySQL 默认缓存 ResultSet 数据,因为这是最有效的方式 https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-implementation-notes.html

By default, ResultSets are completely retrieved and stored in memory. In most cases this is the most efficient way to operate and, due to the design of the MySQL network protocol, is easier to implement.

你可以试试:query.setFetchSize(),它会给底层的jdbc提示你的要求。但这完全取决于驱动程序,有些人实际上可能只是忽略它并继续获取所有内容

关于java - hibernate 可滚动结果立即获取mysql中的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48582174/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com