hibernate 分页带排序时变慢

ruoye_2008 2011-04-20 12:40:26
大概200000条数据,共分15000页

不带排序时:
查最前几十页:所耗时间大概为15ms
查最后几十页:所耗时间大概为120ms

带排序时:
查最前几十页:所耗时间大概为120ms
查最后几十页:所耗时间大概为4500ms

说明:排序是以主键来排序的,主键是long型

以前一直没注意这个问题,这次用稍微多点的数据试一下,竟然这样,大家碰到过类似问题没,有没有什么好的解决办法?
...全文
120 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingmc007 2011-05-23
  • 打赏
  • 举报
回复
采用的分页原理有问题,这里介绍下我理解的两种分页原理。
①将数据库中的所有数据取出,然后进行分页,取出你要的数据。当数据量小的时候不容易看出区别,担当数据量大时就能很明显的看出效率问题。
②提前将数据在数据库中做好分页,然后在按需求取出需要的数据。这样不管数据量大小,效率都差不多。

建议都用第二种分页原理。你可能用的是第一种的吧!
wanghao198612 2011-05-23
  • 打赏
  • 举报
回复
Oracle的分页是伪分页,都是采用where rownum<?来处理的,如果出现数据量大的查询,可以采用
select * from components where id not in(select id from components where
rownum<=(PAGESIZE*(CURRENTPAGE-1))) and rownum<=PAGESIZE order by id;
ted 2011-05-23
  • 打赏
  • 举报
回复
帮你顶,顺便mark
ruoye_2008 2011-05-23
  • 打赏
  • 举报
回复
最后再顶一次,看大家有没有碰到此种问题?
ruoye_2008 2011-04-21
  • 打赏
  • 举报
回复
哦,是Oracle数据库

至于分页原理,Hibernate不就那两句:

query.setFirstResult(firstResult);
query.setMaxResults(maxResults);
剑神一笑 2011-04-21
  • 打赏
  • 举报
回复
mysql数据库? 那个limit 15000,15000+100
mysql分页不能这样做的 这种做法会先取出前15000+100数据 然后再取后面100条
所以越到后面越慢
miaomiao_j 2011-04-21
  • 打赏
  • 举报
回复
把你的分页 代码贴出来 看下啊
steryzone 2011-04-21
  • 打赏
  • 举报
回复
或者你说下你的分页原理,这样能更好说下如何优化

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧