数据量不大时:可以用 
query.setFirstResult(start).setMaxResults(limit);
list=query.list();但是当数据量达到几百万时,比如100万条 如果分页时要查询第90万条时。他是这样的:
 select  top  900000 from 表名 
这样就很慢哪位有什么好的方法没  不要存储过程的

解决方案 »

  1.   

    用hibernate 自带的分页查询方法 getHibernateTemplate().findByCriteria();
      

  2.   

    那你就不要使用Query对象去查询了,hibernate也有提供Connection,可以使用jdbc去操作,这样你就可以优化sql语句了Connection con=session.connection();
      

  3.   

    select  top  900000 from 表名
    你要一次查90万条出来,能不慢吗?
      

  4.   

    2005有分页函数 不过我记得光用SQL也能完成真分页 利用TOP套TOP(套非常多的TOP..)
      

  5.   


    用SQLQuery也行 不必非得获得Connection
      

  6.   

    其实 用top  嵌套top的 就是把运行全交给了sqlserver
      

  7.   


    hibernate性能很好的,我在很多大型系统中都用了,也遇到很多百万级的数据,楼主要搞清楚,你查的是第90万条记录,不是前90万条记录
      

  8.   

    如果是mysql 就不存在这样的问题    因为他有limit 
    sqlserver 2000 就支持 top  
      

  9.   

    /*--------------简单的分页sql  10和0可以更改------------------*/select top 10 * from tab where id not in(select top 0  id from tab order by id) order by id/*--------------利用between and分页------------------*/WITH abc AS(SELECT *,ROW_NUMBER() OVER (order by nodeid)as RowNumber FROM sysfun )
    SELECT * FROM abc WHERE RowNumber between 10 and 20