sql查询数据过多内存溢出的解决方法

66次阅读
没有评论

共计 986 个字符,预计需要花费 3 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章主要介绍 sql 查询数据过多内存溢出的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

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

使用分页查询语句。

因为分页查询每次只会查询少量数据,所以不会占用太多内存,而且数据量很大的时候,分页查询会节约一些时间的。

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 条记录到客户端)

以上是“sql 查询数据过多内存溢出的解决方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-16发表,共计986字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)