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

devtools/2025/3/13 9:25:53/

原因解析

速度慢无非两个原因:

  • sql取数很慢
  • 程序很慢

sql很慢有3种原因:

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

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

  • 框定一个大致的范围,获取此次查询的所有数据
  • 使用map设置数据,没有主键使用傅和主键拼接数据
java">// 使用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.ppmy.cn/devtools/166731.html

相关文章

Java多线程与高并发专题——阻塞和非阻塞队列的并发安全原理是什么?

引入 之前我们探究了常见的阻塞队列的特点&#xff0c;在本文我们就以 ArrayBlockingQueue 为例&#xff0c;首先分析 BlockingQueue &#xff0c;也就是阻塞队列的线程安全原理&#xff0c;然后再看看它的兄弟——非阻塞队列的并发安全原理。 ArrayBlockingQueue 源码分析 …

【网络协议详解】——QOS技术(学习笔记)

目录 QoS简介 QoS产生的背景 QoS服务模型 基于DiffServ模型的QoS组成 MQC简介 MQC三要素 MQC配置流程 优先级映射配置(DiffServ域模式) 优先级映射概述 优先级映射原理描述 优先级映射 PHB行为 流量监管、流量整形和接口限速简介 流量监管 流量整形 接口限速…

什么样的场景适用redis?redis缓存是什么?

基于 Java SSH 老项目、数据量大、查询慢、尽量少改动的现状&#xff0c;如果加入 Redis&#xff0c;可以从哪些场景切入&#xff1a; 1. 高频读取、低频更新的数据 场景示例&#xff1a; 商品信息、用户基础资料&#xff08;每日读取百万次&#xff0c;每周更新一次&#xff…

vue3自定义指令实现输入框值范围大小限制

// 自定义指令代码 export default (vue: any) > {const handler ($event: Event) > {const inputEl $event.target as HTMLInputElement;let maxValue inputEl.max ? parseFloat(inputEl.max) : 0;let minValue inputEl.min ? parseFloat(inputEl.min) : 0;let va…

【js逆向】iwencai国内某金融网站实战

地址&#xff1a;aHR0cHM6Ly93d3cuaXdlbmNhaS5jb20vdW5pZmllZHdhcC9ob21lL2luZGV4 在搜索框中随便输入关键词 查看请求标头&#xff0c;请求头中有一个特殊的 Hexin-V,它是加密过的&#xff1b;响应数据包中全是明文。搞清楚Hexin-V的值是怎么生成的&#xff0c;这个值和cooki…

学习网络安全需要哪些基础?

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 学习网络安全&#xff0c;对于想要进入IT行业的朋友们来说是一件非常重要的事情。尤其是在当今社会&#xff0c;互联网已经渗透到工作和生活的方方面面&#xff0…

计算机网络开发(3)——端口复用、I\O多路复用

端口复用 由于有一个MSL&#xff0c;所以上一秒关闭的服务器&#xff0c;可能之前的端口还未释放&#xff1b;又或者是程序突然退出系统没有释放端口&#xff0c;导致端口被占用。 当有新的服务想要用这个端口的时候&#xff0c;会出现错误&#xff1a;服务会出现Bind error:A…

编写Dockerfile制作tomcat镜像,生成镜像名为tomcat:v1,并推送到私有仓库。

1.具体要求如下&#xff1a; 基于rockylinux:8基础镜像&#xff1b; 指定作者为openlab&#xff1b; 安装tomcat服务&#xff0c;暴露8080端口&#xff1b; 设置服务自启动。 总结步骤&#xff1a;基于rockylinux:8&#xff0c;安装Java环境&#xff0c;安装Tomcat&a…