java - 将结果集转换为 Java 模型对于一百万条记录来说速度缓慢

标签 java select records bulk

这就是我的代码的样子。查询执行时间不到一分钟,但 while 循环需要 2 个多小时才能完成!我有大约 800,000 条记录。您能让我知道保存在reportModelList 中的最佳方法吗?如果需要,我什至可以切换到 hibernate 。

PreparedStatement ps =connection.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
try{
while (rs.next()) {
ReportModel t = new ReportModel();
t.set1(rs.getDate(1));
t.set2(rs.getDouble(2));
...
...
t.set60(rs.getString(60));
reportModelList.add(t)

}}finally {
DbUtils.closeQuietly(rs);
}

最佳答案

三点建议。

  1. 正如@Luiggi Mendoza 作为评论所写的那样,请使用较大的初始缓冲区初始化您的列表,这样它就不会整天重新分配和复制。
  2. 根据您的数据库和 JDBC 驱动程序,您可能会使用 ps.setFetchSize(50000); 获得加速(使用常量。)如果您的提取大小很小,您会执行大量操作我想要更多次往返您的服务器。
  3. 不要猜测哪一步是瓶颈;使用分析器。

关于java - 将结果集转换为 Java 模型对于一百万条记录来说速度缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19328570/

相关文章:

delphi - 在 DWScript 中从 Delphi 向记录类型添加方法

java - 质数循环仅将 "2"写入控制台。 java

java - Guice:如何注入(inject)接口(interface)默认实现的实例?

html - 如何编辑具有相同类名的所有 CSS?

mysql - 对非规范化数据的简单 SELECT 查询

clojure - 统一访问具有概率字段的 Clojure 记录

delphi - Delphi中向量类的实现?

java - 对于java中 fragment 之间的通信, val bundle = bundleOf(..) 相当于什么?

java - 检查日期解析是否正确

MySQL 按另一行的匹配数排序查询响应