栀八月yu 2022-09-09 10:37 采纳率: 76.3%
浏览 108
已结题

怎么解决后台查询慢的问题呢?

怎么解决后台查询慢的问题啊?
总共有19个站,全选的话,后台循环查询需要4分钟,然后就把sql语句#{ }换成了${ },快了点,但是有没有其他办法让查询时间更快一点啊

img

img

@Override
    public Object selectTotal(JNameVo jNameVo) {
        DecimalFormat decimalFormat = new DecimalFormat("0.00");
        List<String> syzNameList = jNameVo.getSyzName();
        List<Object> object = new ArrayList<>();
        if (ListUtil.isNull(syzNameList)) {
            syzNameList = jSyzinfoMapper.selectName();
        }
        if (StringUtil.isNotEmpty(jNameVo.getStartTime()) && StringUtil.isNotEmpty(jNameVo.getEndTime())) {
            for (String name : syzNameList) {
                Map<Object, Object> data = new HashMap<>();
                JRbhis Total = jRbhisMapper.selectTotal(jNameVo.getStartTime(), jNameVo.getEndTime(), name);
                if(Total!=null){
                    data.put("syzName", name);
                    data.put("energy", Total.getEnergy());
                    data.put("energyLj", Total.getEnergyLj());
                    data.put("syje", Total.getSyje());
                    data.put("power", Total.getPower());
                    data.put("flow", Total.getFlow());
                    data.put("row",object.size()+1);
                    //判断时间是否到了每年的11月15号,不到11月15号,按上一年11月15号开始查
                    String date = jNameVo.getStartTime();
                    String[] dateRange = getDateRange(date);
                    if(dateRange != null && dateRange.length >0 ) {
                        String startDate = dateRange[0];//改过的时间
                        String endDate = dateRange[1];//原本时间
                        JRbhis jenergy = jRbhisMapper.selectTotal(startDate, jNameVo.getEndTime(), name);
                        data.put("jenergy", Total.getEnergy());
                    }
                }else{
                    data.put("syzName", name);
                    data.put("energy", 0);
                    data.put("energyLj", 0);
                    data.put("syje", 0);
                    data.put("power",0);
                    data.put("flow", 0);
                    data.put("row",object.size()+1);
                    data.put("jenergy", 0);
                }
                object.add(data);
            }
        }
        return object;
    }

 <select id="selectTotal" resultType="com.hnzy.ymserver.entity.JRbhis">
        select a.syzName,a.energy,a.energyLj,b.syje,b.power,b.flow from
        (select max(energy)-min(energy) as energy , max(energyLj)-min(energyLj) as energyLj,syzName from J_RbHis
        where recordTime>= '${startTime}' and recordTime <= '${endTime}'
        group by syzName) a,
        (select * from J_RbInfo) b
        where a.syzName=b.syzName
        and a.syzName = '${syzName}'
 </select>

  • 写回答

8条回答 默认 最新

  • 鱼找水需要时间 Java领域优质创作者 2022-09-09 10:48
    关注

    不要循环去查,一次把符合条件的所有数据查询出来 在代码里去处理

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 4月24日
  • 已采纳回答 4月16日
  • 创建了问题 9月9日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真