我正在使用 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/