【发布时间】:2014-11-20 16:16:41
【问题描述】:
我正在使用 MySQL 并希望使用 setFetchSize 属性。默认的 MySQL JDBC 实现并不真正尊重它。如果您将 fetchsize 设置为 Integer.MIN_VALUE 它将单独获取每一行,但考虑到我想使用 fetchSize 的原因是我有足够的数据将我的内存使用量置于 2 G 范围内,必须每行执行一个查询将永远。
我想插入一个 JDBC 实现,该实现将与 MySQL 一起工作并正确遵守 fetch size,允许我将 fetchsize 设置为 10,000 或其他更高的限制。谁能指点我一个可以提供这种实现的罐子?如果没有任何其他资源允许我以一种高效的方式合理地执行包含数万个条目的查询,但在内存和所需的 sql 查询数量方面。
【问题讨论】:
-
Integer.MIN_VALUE 是负数,它如何获取一些负数的行?
-
@ElliottFrisch 这就是 MySQL JDBC 驱动程序的工作方式。当您指定
Integer.MIN_VALUE时,它要么获取(流)所有内容,要么允许一对一检索。见dev.mysql.com/doc/connector-j/en/…(在结果集下) -
“必须每行执行一个查询” 我是否理解您认为 fetchSize 控制检索到的最大行数?因为这不是发生的情况:单个查询仍会产生所有行,它只会逐个获取行。
-
@mark 你是对的,这只是一个查询。必须为每行 ping 服务器的延迟和带宽成本仍然是我关心的问题。抱歉我的描述不够准确。
-
每行确实没有 ping 或往返(正如 MySQL 文档的不幸措辞可能暗示的那样)。