数据库分页和jdbc游标分页性能比较
我一直用的游标分页,也没遇到什么性能问题,就是下边这种:
try{ List<T> list=new ArrayList<T>(); if(page != null) { if (rs.last())page.setTotalRow(rs.getRow()); //rs.beforeFirst(); rs.absolute(page.getFirstRow()); } T obj; for(int i=1 ; (page == null || i <= page.getPageSize()) && rs.next() ; i++) { obj=mapper.mapRow(rs, i); if(obj!=null)list.add(obj); } return list; }finally{ JdbcUtils.closeResultSet(rs); }
还有一种就是数据库分页,用row_number之类的,我的问题是,到底是在程序里用游标分页性能好呢还是数据库分页性能好?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
个人认为的,数据库返回的结果集是全部的,但并不返回到JAVA的内存中,游标移动获取数据,还会去DB获取当前游标数据
引用来自“麒”的评论
性能没有实际比较过,不过个人推荐 oracle使用 row_number,mysql使用limit。
原因:
1.适用性的范围,如果不是使用JDBC直接操作数据库呢,比如用mybatis或者hibernate等,难道还要费二遍事获得connection然后按照jdbc的方式操作一遍嘛
2.一个盒子里有100个物品,现在需要20个。一种是一次拿出20个,一种是拿20次一次一个。
3.如果没记错的话,jdbc游标如果大量滚动查询,对内存消耗也是很客观的
性能没有实际比较过,不过个人推荐 oracle使用 row_number,mysql使用limit。
原因:
1.适用性的范围,如果不是使用JDBC直接操作数据库呢,比如用mybatis或者hibernate等,难道还要费二遍事获得connection然后按照jdbc的方式操作一遍嘛
2.一个盒子里有100个物品,现在需要20个。一种是一次拿出20个,一种是拿20次一次一个。
3.如果没记错的话,jdbc游标如果大量滚动查询,对内存消耗也是很客观的