JDBC性能-将大型结果集从数据库传递到Java
我有一个与性能相关的问题。我需要从数据库中检索大约500行,以便使用ApachePOI将结果导出到MicrosoftExcel电子表格中 到目前为止,对于所有的数据库查询,我一直在数据库层中填充一个PL/SQL对象,然后将该PL/SQL对象返回给Java并循环遍历结果 但是现在我需要从db层向Java返回如此大的结果集,有人问我一个问题,我是否认为通过XMLCLOB将500行返回Java会更好 这是一个有点悬而未决的问题,但我希望能得到大家的意见JDBC性能-将大型结果集从数据库传递到Java,java,oracle,Java,Oracle,我有一个与性能相关的问题。我需要从数据库中检索大约500行,以便使用ApachePOI将结果导出到MicrosoftExcel电子表格中 到目前为止,对于所有的数据库查询,我一直在数据库层中填充一个PL/SQL对象,然后将该PL/SQL对象返回给Java并循环遍历结果 但是现在我需要从db层向Java返回如此大的结果集,有人问我一个问题,我是否认为通过XMLCLOB将500行返回Java会更好 这是一个有点悬而未决的问题,但我希望能得到大家的意见 谢谢使用Java结果集。这将一次只获取一些行,因
谢谢使用Java结果集。这将一次只获取一些行,因为您需要它们。下面是一个如何使用它的示例:
基本上,每次请求新行时,如rs.next()中所示,JDBC系统都会决定数据是否在客户端可用,或者是否需要从服务器获取。这样,您就不会一次获取所有数据。使用Java结果集。这将一次只获取一些行,因为您需要它们。下面是一个如何使用它的示例: 基本上,每次请求新行时,如rs.next()中所示,JDBC系统都会决定数据是否在客户端可用,或者是否需要从服务器获取。这样,您就不会一次获取所有数据。根据 默认情况下,当Oracle JDBC运行查询时,它会检索结果集 从数据库游标一次删除10行。这是默认设置 Oracle行获取大小值。您可以更改行数 通过更改行,在每次访问数据库游标时检索 获取大小值 以下方法在所有语句、PreparedStatement、CallableStatement和ResultSet对象中都可用,用于设置和获取提取大小:
void setFetchSize(int rows) throws SQLException
int getFetchSize() throws SQLException
依照
默认情况下,当Oracle JDBC运行查询时,它会检索结果集
从数据库游标一次删除10行。这是默认设置
Oracle行获取大小值。您可以更改行数
通过更改行,在每次访问数据库游标时检索
获取大小值
以下方法在所有语句、PreparedStatement、CallableStatement和ResultSet对象中都可用,用于设置和获取提取大小:
void setFetchSize(int rows) throws SQLException
int getFetchSize() throws SQLException
500行不算大,除非每行都很大。500行不算大,除非每行都很大。@ScaryWombat可能会调用数据库。实际情况是一次返回N行,其中N由您通过
语句.setFetchSize()控制。
@ScaryWombat可能会导致对数据库的调用。实际情况是一次返回N行,其中N由您通过语句.setFetchSize()控制。
+1这通常是正确的答案-尽管500行确实不大。再次强调500行不大,我建议将fetch大小设置为与期望检索的行数相匹配,以限制对数据库的往返。YMMV,但我的经验是,最佳提取大小通常在500到1000行之间。@BrettOkken您知道最佳提取大小的数据大小是多少吗?显然,行大小可能会有很大差异。@ScaryWombat这是基于每个表的测试。很明显,像Blob、Club或UDT专栏之类的东西会影响这一点。我只是简单地说,我使用的大多数表都是500-1000的获取大小,试图最大化总吞吐量。+1这通常是正确的答案-尽管500行不算大。再次强调500行不算大,我建议将fetch大小设置为与期望检索的行数相匹配,以限制对数据库的往返。YMMV,但我的经验是,最佳提取大小通常在500到1000行之间。@BrettOkken您知道最佳提取大小的数据大小是多少吗?显然,行大小可能会有很大差异。@ScaryWombat这是基于每个表的测试。很明显,像Blob、Club或UDT专栏之类的东西会影响这一点。我只是简单地说,我使用的大多数表都是500-1000的获取大小,目的是最大限度地提高总体吞吐量。