论坛首页 Java企业应用论坛

关于分页查询的疑惑

浏览 22413 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-10-25  
absolute虽然这个方法每个jdbc驱动都有,但是实现的具体方法和效率是不一样的。
count的影响确实不大。重建索引就可以。200万的一个表中,没建索引之前,count需要20多秒,建了索引,0.n秒就可以了。

不过如果真是百八十万条以上的分页,还是先让用户输入查询条件更为合适。或者默认限定查询条件。
0 请登录后投票
   发表时间:2006-10-25  
Lucas Lee 写道
你的疑问很好。

BTW,我不使用缓存的原因,并不仅是因为性能的考虑,而主要是:
1)你将几万甚至几十万的记录缓存在session里,(应该是放在这里吧?),你不觉得session里放大量东西会严重影响性能么?这个应该算是常识吧。
2),你什么时候更新缓存?用户想看到自己或其他用户添加、更改的内容,你用什么逻辑去更新?是否要考虑线程安全性?深入点,你会发现实际所有使用缓存的方法都会有类似的问题,所以特别是在数据库应用中,我会对数据内容缓存(非配置数据)持非常谨慎的态度。

而对于性能来说,我的一个主要观点是:
(我的假设,对一般情况而言)如果用户发现数据非常大,在一般情况下,不会依次查看每页记录,而会更改查询条件或排序方式,使结果更容易读。如果我的假设成立,那么显然,将所有记录都load到缓存里的方法,将有大部分的内容是不会用到的。所以,以前有些数据库查询的设计是,超过一千条的记录,只显示前一千条,和总记录数,这种设计,不是没有道理的,但显然数据库分页的方式比这种更好些,而且保持了类似的性能。


除了session里面不放大量东西这个常识以外
还应该有一个常识:缓存一切可以缓存的资源。
0 请登录后投票
   发表时间:2006-10-25  
引用
除了session里面不放大量东西这个常识以外

从来也不会把数据忘session中缓存的,缓存方案很多,这个最烂。
引用
count的影响确实不大。重建索引就可以。200万的一个表中,没建索引之前,count需要20多秒,建了索引,0.n秒就可以了。

关键问题就在这里,你不能保证每个查询都走索引,尤其是你不能保证每个人都能做到这样。不走索引,任何查询都慢。
还有你说分页没有什么值得讨论的,我也不同意。任何好的思路都有使用范围,我就是希望能够证实我所总结的这个范围是正确的。
0 请登录后投票
   发表时间:2006-10-25  
人身攻击的不要.....

分页有传统方式
传统方式有以下好处:
1好用
2稳定
3教的快
4对于海量数据(我见过10W数据的程序)可达到目的


新的想法有什么好处还不很清楚
但没人尝试怎么才会进步呢?
0 请登录后投票
   发表时间:2006-10-25  
刚特意插了102w记录(mssql)

翻页到1000000记录时候的分页存储过程执行时间 29XX ms

count 102w记录的  是15XX ms

字段就三个
id,name,pass

count和分页条件都是空,排序空.
id主键.name索引.



0 请登录后投票
   发表时间:2006-10-26  
如果用户输入一个查询条件得到10万条数据,你不分页难道等死啊
我们来看看结果。
分页,只返回10条记录,用户感觉很爽,这么快就得到答案了。
不分页,返回10万条记录,用户可以重启系统了。。。
0 请登录后投票
   发表时间:2006-10-26  
cats_tiger 写道
引用
除了session里面不放大量东西这个常识以外

从来也不会把数据忘session中缓存的,缓存方案很多,这个最烂。
引用
count的影响确实不大。重建索引就可以。200万的一个表中,没建索引之前,count需要20多秒,建了索引,0.n秒就可以了。

关键问题就在这里,你不能保证每个查询都走索引,尤其是你不能保证每个人都能做到这样。不走索引,任何查询都慢。
还有你说分页没有什么值得讨论的,我也不同意。任何好的思路都有使用范围,我就是希望能够证实我所总结的这个范围是正确的。


正因为不是每个人查询都能够做到充分利用索引,所以分页查询里就涉及到对数据的分析和掌握。
那么,数据库不直接提供分页功能也就比较合理了。
因为,提供了分页,却不能保证性能。
要性能就要用户自行调优,这就是用户应用层面的东西了。
0 请登录后投票
   发表时间:2006-10-27  
     
0 请登录后投票
   发表时间:2006-10-27  
对记录缓存存在疑问,这样的策略好像不太适合实际情况。用户数据更改后一直看不到变化。
现在存在的另一个问题是如果用户修改记录后分页的页数变了,如何定位当前页呢。
0 请登录后投票
论坛首页 Java企业应用版

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