当前位置: 首页 > article >正文

数据量过大的时候导出数据很慢

原因解析

速度慢无非两个原因:

  • sql取数很慢
  • 程序很慢

sql很慢有3种原因:

  • sql本身查询不合理,需要优化
  • 数据库没有索引
  • 多次频繁访问数据,造成了不必要的开销

取消多次获取数据,一次获取

  • 框定一个大致的范围,获取此次查询的所有数据
  • 使用map设置数据,没有主键使用傅和主键拼接数据
// 使用deliId作为key,将所有未分摊折扣存储在一个Map中
Map<Long, List<SemisteelDiscountPerrow>> discountMap = allDisocuntList.stream().collect(Collectors.groupingBy(SemisteelDiscountPerrow::getDeliId));

// 将数据回填到excel中
map.forEach((key,value) -> {

    valMap[0] = new HashMap(12);
    valMap[0].put("company", value.getCompany());
    valMap[0].put("zyear", value.getZyear());
    valMap[0].put("zmonth", value.getZmonth());
    valMap[0].put("customer", value.getCustomer());
    valMap[0].put("saleOrder", value.getSaleOrder());
    valMap[0].put("deliveryOrder", value.getDeliveryOrder());
    valMap[0].put("wlCode", value.getWlCode());

    dataListChild[0] = new ArrayList<>();
    Map<String, Object> discMap = new HashMap<String, Object>();
    SemisteelDiscountPerrow entity = new SemisteelDiscountPerrow();
    entity.setDeliId(value.getDeliId());
    // List<SemisteelDiscountPerrow> discountList = queryNoZero(entity);
    // 避免使用数据库多次查询,直接使用上面的allDisocuntList查询的数据
    List<SemisteelDiscountPerrow> discountList = discountMap.get(value.getDeliId());
    for (SemisteelDiscountPerrow discount2 : discountList) {
        discMap.put(discount2.getDiscountType(),discount2.getRowDiscount());
    }
    dataListChild[0].add(discMap);
    valMap[0].put("discount", dataListChild[0]);



    list.add(valMap[0]);
});

http://www.kler.cn/a/579610.html

相关文章:

  • 链式多分支规则树模型结构
  • robotjs获取鼠标位置
  • c++介绍锁四
  • 快速排序(二叉树的前序递归遍历思想)
  • 【three.js】动画系统完全指南 - 从事件循环到工业级动画架构
  • MobileBERT: 一种适用于资源有限设备的紧凑型任务无关BERT
  • 关于C/C++语言的初学者在哪刷题,怎么刷题
  • 软件系统压力测试方案,压力测试报告模版(Word原件)
  • OSPF-单区域的配置
  • 反射是什么?
  • 数学建模-1:对变化建模
  • Python正则表达式完全指南:从入门到精通
  • 【Linux网络(一)】初始网络
  • Linux:多线程(单例模式,其他常见的锁,读者写者问题)
  • ESP8266UDP透传
  • 华为Mate 60 Pro+ 等机型适配支持运营商北斗卫星短信功能
  • C++:vector容器(下篇)
  • Milvus的匹配语法
  • 二维码识别OCR接口:开启高效信息提取的新篇章
  • RK Android14 在计算器内输入特定字符跳转到其他应用