List<ConsultationTrtcAudit> tracAuditList = new ArrayList<>();
int start = 0;
int end = 0;
int count = consultationNos.size();
// 分批批量查询
while (end < count) {
end = end + BATCH_QUERY;
end = Math.min(end, count);
List<String> consultationNoBatch = consultationNos.subList(start, end);
ConsultationMarkingRecordDto dto = new ConsultationMarkingRecordDto();
tracAuditList.addAll(consultatioTrtcAuditMapper.listByConsultationNos(dto));
start = start + BATCH_QUERY;
}
java分批查询汇总优化
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 - 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/231203
- 这篇博客你也可以参考下:java 分页查询的实现
- 除此之外, 这篇博客: Java多线程经典案例分享中的 汇总 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
- 您还可以看一下 程序员研修院老师的Java编程基础课程中的 二进制小节, 巩固相关知识点
- 以下回答由chatgpt基于相关博客总结生成:
针对该问题,可以尝试以下优化方法:
- 使用分页查询 在进行大量数据查询时,一次性获取所有数据并进行分批处理显然是不可行的。因此可以采用分页查询的方式,每次查询一定数量的数据并处理,避免过多数据的读取和处理。具体实现可以通过设置分页参数,使用limit和offset语句进行查询,并在循环中不断调整offset参数,实现分批查询。
示例代码:
int pageSize = 1000;// 每次查询1000条数据 int offset = 0;// 数据偏移量 List dataList = new ArrayList(); while(true){ List pageList = dao.getDataList(offset, pageSize);// 数据库分页查询 if(pageList.isEmpty()){ break; } dataList.addAll(pageList); offset += pageSize; }
- 使用多线程进行并行处理 在处理大量数据时,单线程处理效率低下,可以考虑采用多线程进行并行处理。通过将数据分配到多个线程中处理,可以提高整体的处理速度。具体实现可以使用线程池对数据进行分配,每个线程处理一部分数据,最后将处理结果进行汇总。
示例代码:
int threadCount = 10;// 创建10个线程进行处理 ExecutorService executor = Executors.newFixedThreadPool(threadCount); List dataList = dao.getDataList();// 获取所有数据 List>> futureList = new ArrayList>>(); int pageSize = dataList.size() / threadCount + 1;// 每个线程处理数据的数量 for(int i = 0; i < threadCount; i++){ int fromIndex = i * pageSize; int toIndex = Math.min((i+1) * pageSize, dataList.size()); List subList = dataList.subList(fromIndex, toIndex); Future> future = executor.submit(new DataProcessor(subList));// 将数据分配给线程池中的线程进行并行处理 futureList.add(future); } List resultList = new ArrayList(); for(Future> future : futureList){ resultList.addAll(future.get());// 等待所有线程处理完毕并将结果进行汇总 } executor.shutdown();// 关闭线程池
- 优化代码逻辑,减少多余操作 在进行大量数据处理时,代码逻辑的优化也非常重要。可以通过减少无用的操作和减少代码重复,来提高代码的执行效率。例如,对于需要进行汇总的数据,可以在处理数据的同时记录总和,避免多次遍历数据计算总和。
示例代码:
List dataList = dao.getDataList(); int sum = 0; List resultList = new ArrayList(); for(Data data : dataList){ int value = processData(data);// 对数据进行处理 sum += data.getValue();// 计算总和 resultList.add(new Result(data.getId(), value)); } Result summary = new Result(0, sum);// 生成总和结果
解决 无用评论 打赏 举报
悬赏问题
- ¥15 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
- ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
- ¥16 mybatis的代理对象无法通过@Autowired装填
- ¥15 可见光定位matlab仿真
- ¥15 arduino 四自由度机械臂
- ¥15 wordpress 产品图片 GIF 没法显示
- ¥15 求三国群英传pl国战时间的修改方法
- ¥15 matlab代码代写,需写出详细代码,代价私
- ¥15 ROS系统搭建请教(跨境电商用途)