System.out.println(t3-t2+"ms查所有一级部门预算时间");
         System.out.println(depExpInfoStatlist.size()+"一级部门数量");
         for(int i=0;i<depExpInfoStatlist.size();i++) {
         depExpInfoStat = depExpInfoStatlist.get(i);
         depId1 = depExpInfoStat.getDepId();
         budgetYear1 = depExpInfoStat.getBudgetYear();
         budgetAmount = depExpInfoStat.getBudgetAmount();
         if(budgetAmount==null) {
         budgetAmount =new  BigDecimal(0);
         }                 
         depExpInfoStat1 =iAgencyExpDao.queryAllDepExpStatic(depId1,budgetYear1);                 
         noExpOver = iAgencyExpDao.queryNoExpOver(depId1,budgetYear1);
        
        
         }
         long t4 = System.currentTimeMillis();
         System.out.println(t4-t3+"所有数据处理完");

解决方案 »

  1.   

    就是哪两个dao操作差不对都是10ms左右,只是循环次数一多,就变慢了
      

  2.   

    那问题就清楚了。优化下这两个dao对应SQL语句。
      

  3.   

    不需要for循环,depExpInfoStat1 和noExpOver 直接在查询depExpInfoStatlist的时候就能查出来。重写一下sql吧。
      

  4.   

    https://blog.csdn.net/Guanjs2016/article/details/80237490
    mysql多个字段同时in
    并不需要查询多次,只要构造好参数,sql只查一次,把所有数据查出来,然后再循环
    慢的是网络IO,在内存中循环的时间可以忽略不计
      

  5.   

    最好不要在循环里面调用DAO,最好一次性就把数据拿出来,然后再在后台处理,这样速度会快很多。要是在循环里面调用SQL的话,只要循环次数稍微大一点,这速度就会很慢了。
      

  6.   

    嗯,谢谢各位,这个sql是经常变化的所以不能放内存对象,循环内部执行也不能少,所以我还是重写下sql
      

  7.   


    对,优化下sql索引或者where 顺序  调整下
      

  8.   

    sql 语句用in查询,不需要每次循环执行一句sql
      

  9.   

    可以了解一下jdk1.8中的Stream流来提高执行效率
      

  10.   

    不一定业务数据全部需要Sql来查询,必要的时候可以通过程序筛选一部分
      

  11.   

    不常用的数据的话 试试放redis里面如何呢...
      

  12.   

    首先这种慢的情况都有套路的,
    然后呢套路如下:
    1.代码效率低下,这种情况很少,各种无脑的for循环嵌套,处理的方法就是优化代码,清晰的逻辑写出来的代码干净又有效率。
    2.sql冗长且无关数据太多,处理的方法就是只查自己需要的,没事别乱取数据,比如你只用A字段结果拿了个类型为text的B字段,当然回慢下来。
    3.数据量大,这种情况下最为复杂,
    对于经常查询但极少更改的数据,做缓存这个方法最简单,效果又好;
    加适当的索引,会极大程度上的提升查询效率,但是乱加索引会影响其他的效率,比如增删改;
    绝大部分情况下,避免N+1,数据库连接也是耗时间的,10ms一次1000次那耗时就上去了,能再sql层面直接取出连接好的数据,就直接去,不能直接取可以分两次取出后再代码里连接。极少数情况下N+1是可取的,这种情况很特殊,并不是所谓的一定不能写N+1
    总的来说,优先定位原因,根据原因对应的处理就好了。
      

  13.   

    无力吐槽!你看看你都创建了多少BigDecimal对象?
      

  14.   

    循环里最好不要做SQL这是很基本的东西