【发布时间】:2014-07-09 23:13:15
【问题描述】:
在一个程序中,我做了类似的事情:
ResultSet rs = con.executeQuery(sql);
List l = new List();
while(rs.next()){
l.append(rs.getObject(xxx))
}
fileSys.write(l)
sql 有 10M 的记录。此功能需要 2 小时才能完成。循环占用大部分时间。我想知道有没有更好的方法来做这件事?是否可以使用多线程?
【问题讨论】:
-
为什么需要将 10M 项加载到列表中?为什么不直接将它们输出到文件中(假设从您的示例中这是您想要做的)。如果您正在使用 10M 项目列表做其他事情,请说明它是什么。
-
将 10M 项目直接写入文件比将 10M 项目附加到列表中然后将整个列表写入文件要慢。
-
好的,然后尝试寻找一种可以有效地将sql结果集写入文件的方法。快速搜索找到了THIS ARTICLE,但如果您只想这样做,还有很多其他可能的方法来完成它。
-
这是另一个链接 - THIS ONE FOR JAVA。在某种程度上,您必须考虑将大量数据传输到磁盘,并且 将 需要一些时间,但 2 小时似乎过分了。不确定多线程是否可以工作——多个线程如何同时写入同一个文件流?
-
@SlimsGhost 如果 2 小时太长,那么 SQL 查询中可能存在严重问题。服务器准备查询计划、执行它可能需要很长时间,如果每条记录有约 500 字节,那么它必须将约 5GB 的数据传输到客户端。在没有看到 SQL 的情况下,我看不到任何通用帮助,然后确保您已关闭客户端的内存缓存并使用快速 ODBC 只进游标
标签: sql performance jdbc