php 内存溢出 怎么查,sql查询数据过多内存溢出怎么办

当遇到大数据查询时,可能会引发内存溢出。为避免这种情况,可以使用分页查询语句,如MySQL的LIMIT关键字,每次只获取部分数据,减少内存占用。此外,可以通过设置jdbc连接URL的`useCursorFetch=true`和`defaultFetchSize=100`参数,优化内存使用。这种方法既能提高查询效率,又能防止内存溢出。
摘要由CSDN通过智能技术生成

正常来说,一般是不会出现这种情况的,但也不能保证,偶尔有这种情况发生,解决方案如下:

2dac540fecfcdab8b03341dfae77c951.png

使用分页查询语句。 (推荐学习:mysql学习)

因为分页查询每次只会查询少量数据,所以不会占用太多内存,而且数据量很大的时候,分页查询会节约一些时间的。String sql = " SELECT uid,uname FROM t_user LIMIT ?,? " ;

PreparedStatement ps = con.prepareStatement(sql) ;

int pageSize = 10000;

int pageId = 0;

do {

pst.setInt(1, pageId * pageSize);

pst.setInt(2, pageSize);

ResultSet rs = pst.executeQuery();

boolean isEmpty = true;

while (rs.next()) {

isEmpty = false;

id = rs.getInt(1);

name = rs.getString(2);

}

if (isEmpty) {

break;

}

pageId++;

} while (true);

con.close();

} catch (SQLException e) {

e.printStackTrace();

}

添加url参数配置

在jdbc的URL上加两个参数就OK,成功解决内存溢出的问题。"jdbc:mysql://localhost:3306/db3?useCursorFetch=true&defaultFetchSize=100";

( 解释一下Fetch,当我们执行一个SQL查询语句的时候,需要在客户端和服务器端都打开一个游标,并且分别申请一块内存空间,作为存放查询的数据的一个缓冲区。这块内存区,存放多少条数据就由fetchsize来决定,同时每次网络包会传送fetchsize条记录到客户端 )

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值