Mysql的Limit都没搞懂,怪不得就老是报Java heap space的错了

22 篇文章 0 订阅

一个同事需要做一件事情,需要从数据库取数据,然后按照固定格式存入文件,然后传至总行,在测试的过程中,需要大量数据,就以19年的生产数据进行测试,测试的过程中,老是提示Java heap space,便问我如何解决这个内存溢出的问题。

如何解决这个问题,便只有从开发工具:Eclipse+Tomcat入手了,增大内存,不就Ok了吗?如何调整Eclipse和Tomcat运行时内存,网上方法很多,这里就不说了,可是奇怪的事情发生了,该同事调整以后,再次运行,又报Java heap space的错了。

那么,初步判定,可能一次性从数据库取数据太多了,又或者是集合循环装数完毕以后,没有及时clear,总之就是代码肯定有Bug,问他有没有采用分页进行取数,也采用了,那么,问他一页多少条数据,告诉我一页5w条,5w条数据也不多呀,我去看了一眼代码,结果惊呆了,该同事的思路是这样的:

String sql = SELECT COUNT(*) FROM table_name WHERE 条件;
int pageCount = 100000;
int page = publicDao.count_SS(sql)/pageCount;
初步设定按照10w数据进行分页
for(int i=0;i<page;i++){
	List<Object[]> list = publicDao.find(sql语句);
	最最关键的来了,分页是这样做的:
	LIMIT i*pageCount,(i+1)*pageCount-1
}

看到这里,估计大家就知道为什么会Java heap space了,因为这个家伙连MySql的limit用法都没搞懂,当i等于10的时候,一次性就要从Mysql读取100w条数据,不Java heap space才怪,那么,Limit是怎么用的呢?

当limit后跟两个数字参数时候表示从第一个参数开始读取,取第二个参数的数据量,怎么理解呢?

SELECT * FROM table_name WHERE 条件  LIMIT  5,10 ;   //检索记录行6-15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值