首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Java从MySQL获取大量记录

通过Java从MySQL获取大量记录
EN

Stack Overflow用户
提问于 2014-09-11 14:50:03
回答 1查看 1.6K关注 0票数 2

有一个MySQL表,即服务器上的用户。它有28行和100万条记录(也可能增加)。我想从这个表中获取所有行,对它们执行一些操作,然后将它们添加到MongoDB中。我知道,通过简单的“从用户中选择*”操作来检索这些记录需要花费大量的时间。我一直在用Java,JDBC来做这件事。所以,我从我的研究中得到的选择是:

选项1.进行批处理:我的计划是从表中获取行总数,即。从用户中选择count(*)。然后,将获取大小设置为1000 (setFetchSize(1000))。在那之后我被困住了。我不知道我能不能写这样的东西:

代码语言:javascript
复制
    Connection conn = DriverManager.getConnection(connectionUrl, userName,passWord);
    Statement stmt =conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,java.sql.ResultSet.CONCUR_READ_ONLY);
    String query="select * from users";
    ResultSet resultSet=stmt.executeQuery(query); 
  • 我的疑问是,一旦执行查询,resultSet是否会有1000个条目,是否应该重复执行操作,直到检索到所有记录为止。
  • 我放弃了这个计划,因为我知道,对于MySQL来说,ResultSet是完全填充的,而且批处理可能不起作用。这种堆叠式的讨论MySQL文档帮了忙。

选项2.执行分页:我的想法是设置一个限制,它将告诉抓取的起始索引和抓取的偏移量。可能是,将偏移量设置为1000并对索引进行迭代。

我读了一篇建议的文章链接,但没有发现在使用限制来处理这个问题时有任何循环漏洞。

任何人如果有足够的耐心阅读这篇长篇文章,请分享你对我的思考过程的宝贵意见,如果有什么不对或遗漏的地方,请纠正我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-19 04:20:39

根据我所做的研究,回答我自己的问题:

  1. 批处理对于select查询并不真正有效,特别是当您想要使用每个查询操作的结果集时。
  2. 分页-好的,如果你想提高内存效率,而不是提高执行的速度。当您有限地触发多个查询时,速度会下降,因为每次JDBC都必须连接到MySQL。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25790613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档