java mybatis List 查询关于内存的问题

夜莺109型 发布于 2017/11/21 14:51
阅读 381
收藏 0

做了一个EXCEL导出的小功能,把数据查到LIST里 然后遍历导出,查数据的时候用了分页查询,现在的情况是库里大约40W数据,每次我查3W出来,查到第10+次就查不动了。卡在执行SQL那个地方。这是什么原因?内存的原因?只能增大JVM的内存来解决吗?list_Device.clear();这个方法不起作用吗?请大神指教。代码如下。

mybatis:

   <select id = "EXPCameraDeviceList" resultType="Map">
    select   *  from  t_device where 1=1 ORDER BY  GXSJ  DESC  limit ${pageNumber},${pageSize}
  </select>
  
  JAVA 代码:
    List<Map<String ,Object>> list_Device=new ArrayList<Map<String ,Object>>();
        for (int j=1;list_num<countg_device;j++){
            list_Device.clear();
            if(j>1){
                map.put("pageNumber", String.valueOf(list_num));//
            }else{
                map.put("pageNumber", "0");
            map.put("pageSize", String.valueOf(sheetMAX_num));
            list_Device = cameraDeviceService.EXPCameraDeviceList(map);
            //对上面查出的集合进行遍历,遍历完,传入新的页码参数进行下一次循环
            for(...){
            ...
            }
        }

加载中
0
using
using

和内存没关系,应该是你查询效率慢,监控下mysql的show proccesslist

夜莺109型
恩 应该是这个原因 后来有人优化了数据库 问题就没有在重现过
0
skhuhu
skhuhu

其实数据占不了多少内存····你库表有主键吗···一个查询 一个写入excel 2个地方比较耗时

夜莺109型
不是耗时的问题。因为是分页查询的嘛,比如每次查三万条,limit 后面传 从第几个查,查多少个。这两个参数,经过循环不断的变化之后,到了第十次,比如该从第30万数据开始往后查出3W数据放进LIST里,这个时候 ,查到一半,突然就停了。现在是这个问题,为什么突然就查不下去了,SQL是没问题的,在数据库工具里查可以查出数据。
0
mlovewt
mlovewt

分页改下,你是单表查询,可以每次都是ID>? LIMIT pageSize

0
阿信sxq
阿信sxq

我想啊,你有没有试过不查询到程序里面然后再转,直接数据库就查询到文件

0
夜莺109型

今天又测了下,莫名其妙的好了,可能是数据库服务器性能给提高了。反正是没找到具体原因……

0
Werido_
Werido_

是自带的pagehelper count求总那里卡吗

0
开源中国马桶盖
开源中国马桶盖

40W的数据 mysql 查出来导出excel ...你们真会玩, 要是4E条数据的话 你们是不是也打算这么玩啊....

返回顶部
顶部