gpt4 book ai didi

mysql - 通过Java从MySQL中获取大量记录

转载 作者:行者123 更新时间:2023-11-29 00:09:38 25 4
gpt4 key购买 nike

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

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

    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 会立即完全填充,批处理可能无法正常工作。 This stackoverflow discussionMySQL documentation帮忙了。

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

我阅读了一篇推荐文章 link , 但在使用 Limit 解决这个问题时没有发现任何循环漏洞。

有好心耐心看完这篇长文的 friend ,能否分享一下您对我的思考过程的宝贵意见,如有不妥之处或遗漏之处请指正。

最佳答案

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

  1. 批处理对于选择查询并不是真正有效,尤其是当您想使用每个查询操作的结果集时。

  2. 分页 - 如果您想提高内存效率,而不是为了提高执行速度,这很好。当您使用 Limit 触发多个查询时,速度会下降,因为每次 JDBC 都必须连接到 MySQL。

关于mysql - 通过Java从MySQL中获取大量记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25790613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com