是否有将遵守fetchSize的mysql JDBC?
我正在使用MySQL,并希望利用该setFetchSize
属性。默认的MySQL
JDBC实现并不真正尊重它。如果将fetchsize设置为fetchsize,Integer.MIN_VALUE
则会分别获取每一行,但是考虑到我要使用fetchSize的原因是,我有足够的数据将内存使用量置于2
G范围内,因此每行必须执行一次查询将永远花费。
相反,我想插入一个可与MySQL一起使用的JDBC实现,并适当考虑取回大小,使我可以将fetchsize设置为10,000或其他更高的限制。谁能指出我可能提供这种实现的罐子?否则,是否有
任何 其他资源可以使我合理地执行一种包含数以万计的条目的查询,但是效率很高,但是需要内存和所需的sql查询数量。
回答:
从技术上讲,要求图书馆的问题是题外话。就是说,据我所知,没有替代的MySQL驱动程序。您可以选择获取所有可能导致内存不足的行,或者选择通过设置驱动程序按需获取它们setFetchSize(Integer.MIN_VALUE)
。
我从Connector / J实施说明中了解到,这样做的原因是MySQL协议每个连接最多只能打开一个游标,因此它默认是在执行时将所有行流式传输到客户端。
另一个选择是,行被一个接一个地检索,但这带来的问题是,在处理时,您不能在同一连接上执行其他语句ResultSet
:
这种方法有一些警告。您 (或关闭)结果集中的 行, 才能对连接发出
,否则将引发异常。
因此,MySQL只能选择全部获取或一次获取一个。这意味着驱动程序无法尊重其他提取大小。并且由于一一告诫,他们选择使用Integer.MIN_VALUE
(而不是简单地1
)作为信号,您应该在执行此操作之前真正考虑一下。
一个可能的“在中间”解决方案将需要您自己使用编程这个LIMIT
和OFFSET
并多次执行查询。
以上是 是否有将遵守fetchSize的mysql JDBC? 的全部内容, 来源链接: utcz.com/qa/410515.html