最近在用一个同事写的后台管理导出数据进行数据分析,然后发现前端一直卡起,后来到服务器上查询日志,发现内存溢出了。
分析出来原因:原来是表数据量过大超过百万,然后导致查出来的数据,直接占满内存。
1 传统思路: 分页查询把大数据分成小数据查询,数据量大的时候分页查询效率低下。
分页查询关键代码
分页查询还可以用线程池进行优化,但是要注意线程安全。
2 流式查询: 可以一边从数据库读取数据,一边进行处理,提高了数据处理的效率。
由于流式查询是逐行读取数据,查询速度可能会受到影响。为了提高性能,可以适当调整 fetch size
注解写法:需要注意方法里面多了个ResultHandler(回调处理),这是和传统查询的区别
流式查询
对比结果
分页查询花费300多秒,流式查询5s左右,效率完胜分页查询。
总结
流式查询很好,但是总有限制条件,请在使用前确保你的数据库支持流式查询。