java - 是否有一个支持 fetchSize 的 mysql JDBC?

标签 java mysql sql jdbc

我正在使用 MySQL 并想利用 setFetchSize 属性。默认的 MySQL JDBC 实现并不真正尊重它。如果将 fetchsize 设置为 Integer.MIN_VALUE 它将单独获取每一行,但考虑到我想使用 fetchSize 的原因是我有足够的数据将我的内存使用量放入 2 G 范围内每行一个查询将永远持续下去。

我想改为插入一个 JDBC 实现,它可以与 MySQL 一起工作并适本地考虑获取大小,允许我将获取大小设置为 10,000 或其他一些更高的限制。任何人都可以指出一个可以提供这种实现的 jar 吗?如果失败,是否有任何其他资源允许我以一种高效的方式合理地执行包含数万个条目的查询,但需要内存和 sql 查询的数量。

最佳答案

如果启用 MySQL JDBC option useCursorFetch,fetchSize 确实会受到驱动程序的尊重。

但是,这种方法有一个缺点:它将使用服务器端游标,而在 MySQL 中,游标是使用临时表实现的。这意味着在服务器上完成查询之前结果不会到达,并且服务器端将使用额外的内存。

如果您只想使用结果流而不关心确切的提取大小,setFetchSize(Integer.MIN_VALUE) 的开销并不像文档可能暗示的那么糟糕。它实际上只是禁用了整个响应的客户端缓存,并在响应到达时为您提供响应;不需要每行往返。

关于java - 是否有一个支持 fetchSize 的 mysql JDBC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26046234/

相关文章:

java - 相当于Hibernate中Component的注解

java - 扩展列表时出错

java - 如何序列化对象的 ArrayList 并将其保存到文件(在 android 中)?

c# - 如何在MYSQL datareader中转换3倍int?

mysql - 使用python将密文插入mysql

PHP 从 MySQL 到 SQL Server 的语法差异

mysql - 如何仅使用 SQL 实现动态 WHERE 子句? (我不能使用任何编程语言字符串连接)

mysql - INSERT INTO table 与 INSERT INTO table SET?

java - Tomcat 8.5 识别新内容的时间过长

mysql - SQL查询优化,如果第一个为空则按其他行排序