论坛首页 Java企业应用论坛

查询的分页问题,考虑性能

浏览 42647 次
该帖已经被评为精华帖
作者 正文
   发表时间:2005-01-08  
我是用count(*)来查询总记录数,然后实现分页的。效率不错啊。
0 请登录后投票
   发表时间:2005-01-13  
我认为最好的办法还是用count(1)查询,没必要把这个分页的特性依赖于任何数据库和JDBC驱动程序
0 请登录后投票
   发表时间:2005-01-17  
amed1 写道


我查询返回的是对象,所以session.iterator(queryString).next()返回的也是一个对象,不能转换为Integer,还是不能拿到总记录数。除非我把queryString里包括一个count(*),可这样觉得不好。

人家说的问题的重点是在这里吧?
0 请登录后投票
   发表时间:2005-01-17  
Readonly 写道
关于amed1的问题,如果偶没有记错的话,在hibernate 2.x里面,还只能用添加count的方式来处理,但是在hibernate 3里面,有api支持result set的定位,来达到同样的目的。


看来偶是记错了:
2.x 里面 Query可以用这样的方式:
ScrollableResults sr = query.scroll();
sr.last();
int total = sr.getRowNumber();
而 Criteria 还没有这样的方法。

在3.0 里面Query和Criteria都已经有scroll的支持了。
0 请登录后投票
   发表时间:2005-01-17  
但是scrol的性能l很依赖jdbc的实现或者数据库的支持.有count的支持好点.
不过分页在很多项目其实也没多大用!
0 请登录后投票
   发表时间:2005-01-18  
说的也是,我们上万条也不分页
0 请登录后投票
   发表时间:2005-06-10  
对于oracle来说,count比滚动的rs是要快很多很多的
mysql的话count至少可以节约内存
如果是sybase就划不来了,因为sybase本身并不提供只取一部分数据的语法,
即使count一下,差到后面的页还是要把数据全部取出来
而对于支持游标的jdbc驱动,自然是滚动的rs最好了。

所以最好是有一个方法,自动根据不同的驱动程序使用不同的方法
0 请登录后投票
   发表时间:2005-06-16  
我们公司也做了一个ListIterator ,思想都差不多,每次load一页,使用起来,挺方便,但有点慢,每次去服务端去交互一次。我个人认为,如果DTO不是太大,数据量还可以的话。这个东东完全可以在客户端去做(一次查询出来)!!!
0 请登录后投票
   发表时间:2007-03-29  
microhf 写道
看看这哥们对分页的研究:
http://dev.csdn.net/article/43/43936.shtm

虽然是csdn的文章,虽然是sql server,虽然是c#和.aspx......
但是这哥们是实实在在思考和解决问题,而且不错


呵呵, 关于数据库查询优化, 这些肯定是根本. 在HIBERNATE上, 是如何有效将这些思想利用的问题.
0 请登录后投票
   发表时间:2007-03-29  
会有什么问题
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics