数据库连接太慢问题(3层for)

sqlServer 进行报表查询 连接查询数据的时候过慢

1  后台与数据库交接过于频繁

 解决

 修改连接默认值

2  代码书写问题

用到了三层for 循环(嵌套for 非常影响速度,大约 m 的N 次方倍 减慢)

解决:用变量进行接受,将三层for 循环变成二层for 循环

速度可以提升n 倍

当然最好用存储过程,其次用redis

 

转载于:https://www.cnblogs.com/jsbk/p/9682521.html

### 解决MyBatis foreach 查询性能问题 当遇到 MyBatis `foreach` 查询执行速度慢的情况时,通常是因为以下几个原因: 1. **SQL语句生成效率低** 使用 `foreach` 进行批量查询时,如果参数列表过长,可能会导致 SQL 语句变得非常庞大。这不仅增加了数据库解析的时间,还可能导致内存溢出等问题[^1]。 2. **网络传输开销大** 对于大量数据的查询请求,每次发送到数据库服务器的数据包会很大,从而增加网络传输时间。特别是在分布式环境中,这种影响更为明显。 3. **数据库连接池配置不合理** 如果应用程序使用的数据库连接数过多或不足,都会影响整体性能。过多的并发连接可能耗尽资源;而太少则无法充分利用多核CPU的优势[^2]。 #### 方案一:优化SQL语句结构 通过调整 SQL 的写法来减少不必要的复杂度。例如,在某些情况下可以考虑使用子查询代替多个条件拼接的方式。另外,对于确实需要遍历集合的操作,应该尽可能简化逻辑并控制输入集大小。 ```sql SELECT * FROM table_name WHERE id IN ( SELECT UNNEST(ARRAY[:idList]) ); ``` #### 方案二:分批处理大批量数据 为了避免一次性提交太多记录给数据库造成压力,建议将待查数据分成若干个小批次分别执行。这样既可以降低单次操作的成本,又能有效防止因超时设置不当而导致失败的问题发生。 ```java int batchSize = 100; for (int i = 0; i < list.size(); i += batchSize) { int endIndex = Math.min(i + batchSize, list.size()); List sublist = list.subList(i, endIndex); mapper.selectByIds(sublist); // 假设有一个方法接受ID列表作为参数进行查询 } ``` #### 方案三:合理配置数据库连接池 确保应用数据库之间的交互顺畅至关重要。适当调优连接池的最大活跃连接数量、最小闲置连接数目以及等待获取连接的最大时限等参数,有助于提高系统的响应能力和吞吐率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值