Mysql通过分页查询处理百万条数据(单线程)
程序员文章站
2022-03-14 14:23:51
Mysql查询百万数据:(亲测!!! 数据迁移,800万数据,先查询后添加,三个半小时完成)查询方法如下: /** * 查询 * * @param args */ public static void main(String[] args) throws Exception { int count = 8540934;//通过count查到数据总量 int num = 10000;//每次查询的条数 //...
Mysql查询百万数据:
(亲测!!! 数据迁移,800万数据,先查询后添加,三个半小时完成)
查询方法如下:
/**
* 查询
*
* @param args
*/
public static void main(String[] args) throws Exception {
int count = 8540934;//通过count查到数据总量
int num = 10000;//每次查询的条数
//需要查询的次数
int times = count / num;
if (count % num != 0) {
times = times + 1;
}
//开始查询的行数
int bindex = 0;
ArrayList<Quequan_xinyang> list = new ArrayList<Quequan_xinyang>();
for (int i = 0; i < times; i++) {
long l = System.currentTimeMillis();//获取时间戳
//通过分页查询进行大数据处理
String sql = "select * from quequan_xinyang where DKBM>=(select DKBM from quequan_xinyang order by DKBM limit "+bindex+",1) limit "+num+"";
try {
//每循环一次都进行数据库连接,释放内存,提高效率
Connection conn = MysqlDBUtil.getConnection();
conn.setAutoCommit(false);//关闭事务,改为手动操作
Statement state = conn.createStatement();
// 执行Sql,得到结果集
ResultSet rs = state.executeQuery(sql);
while (rs.next()) {
Quequan_xinyang zjd = new Quequan_xinyang();
zjd.setYsdm(rs.getString("ysdm"));
zjd.setDkbm(rs.getString("dkbm"));
zjd.setDkmc(rs.getString("dkmc"));
zjd.setSyqxz(rs.getString("syqxz"));
zjd.setDkbzxx(rs.getString("dkbzxx"));
zjd.setZjrxm(rs.getString("zjrxm"));
zjd.setScmjm(rs.getDouble("scmjm"));
zjd.setScmj(rs.getDouble("scmj"));
zjd.setBsm(rs.getInt("bsm"));
zjd.setSj_geometry(rs.getString("sj_geometry"));
list.add(zjd);
}
mysqladd(list);//执行list的方法,比如把数据添加到另一张表上
list.clear();//清空list,防止溢出
conn.commit();
rs.close();
state.close();
conn.close();
// 使用后关闭连接
DBUtil.closeConnection();
} catch (Exception e) {
e.printStackTrace();
}
bindex = bindex + num;//定义下一次查询行数
long l1 = System.currentTimeMillis();//计算时间
System.out.println(l1 - l);
}
System.out.println("结束");
}
本文地址:https://blog.csdn.net/weixin_45498999/article/details/107669254
上一篇: 图片不能显示
下一篇: P1330 *阳光大学 DFS+染色