现象:
两张表 主/从
主表数据 3w+ 从表数据4w+
采用left join 方式进行关联
结果输出2w数据量
【耗时200s】
经查询 发现left join 消耗时长117s+,果断拆分sql
结果集 就是两个list
遍历两个list
for(list1){
for(list2){
}}
输出结果耗时【100s】
发现主要时间都在两层循环里面 遍历次数是 3w*4w
改写算法如下
List<Lexicon> lexiconsOrg = lexiconDao.queryAllListAndExt(lx); List<LexiconExt> alllexiconExt = lexiconExtDao.queryAll(new LexiconExt()); Map<Integer, Lexicon> map = lexiconsOrg.stream().collect(Collectors.toMap(l -> l.getLexiconId(), l -> l)); alllexiconExt.stream().forEach(item -> { if (map.get(item.getLexiconId()) != null) { map.get(item.getLexiconId()).getLexiconExts().add(item); } });
遍历次数 就变成了 3w +4w =7w
性能喜人 ---------【6s】返回结果 虽然时间还是有点长,毕竟数据量在那,生成的文件大概1.6M。算法的魅力 兴奋