NBear的默认分页与自定义分页的比较

1.使用的数据库:Access数据库查询练习专用数据库 -手机号码归属地Access数据库_MobileDB(10万条记录)
2.两种分页算法
(1)NBear的默认分页方法;
         默认是使用了效率最差的方法:
SELECT TOP @PageSize * FROM @TableName 
WHERE @PrimaryKey NOT IN ( 
SELECT TOP @PageSize*@PageIndex @PrimaryKey FROM @TableName 
ORDER BY @PrimaryKey ASC 
ORDER BY @PrimaryKey ASC 

(2)黎波DataGrid基于Access的快速分页法
具体请查看DataGrid基于Access的快速分页法

3.结果分析:

各变量声明:
RecordCount :总记录数;
PageSize = 10 ,分页数;
PageNo :所要查询的页码;
PageTotal = (RecordCount / PageSize + RecordCount % PageSize == 0 ? 0 : 1) :总页数;
Middle =PageTotal / 2 :中间页码;

(1)PageNo <= 1


由结果可以看到,对于PageNo=1的情形,两种算法的查询时间相同,时间复杂度都为1.
对于自定义的快速分页法来说,在第一次加载绑定时,首先需要查询记录的总条数,不过,这所消耗的时间非常少。

(2)1< PageNo<= Middle
此时,对于10万条记录的Access数据库来讲,使用NBear的默认分页查询方式,已经无法运行,我等待了几分钟都还没出结果,就取消了。
以下看到的是自定义分页查询的结果。




(3)Middle < PageNo < PageTotal


(4)PageNo >= PageTotal



4.结论

1.这个自定义分页查询算法是很快速的,假设把所有分页面划分为前面、中间和后面三部分,则最前面和最后面的分页速度最快,最中间的分页速度最慢。并且保证每个部分的速度均匀,造成速度随页码增大而变慢。

2.目前NBear的分页方法还是不高效的,如果项目中需要用到NBear进行大量数据分页查询,推荐使用NBear自定义方式;

3.对于Access数据库,因为不可以使用存储过程,所以只能动态创建Sql脚本来实现,通常这类分页的方法是类似的,可以写一个AccessPagingHelper 类来帮助我们重用自定义快速分页方法。
AccessPagingHelper

5.附
我的测试源文件
posted @ 2006-11-24 21:52 MK2 阅读(487) 评论(3)  编辑 收藏 所属分类: 7 NBear 学习之路8 DataBase

  回复  引用  查看    
#1楼 2006-11-30 12:50 | 蛙蛙池塘      
你的文章没有在首页上发表过吗?
  回复  引用  查看    
#2楼 [楼主]2006-11-30 12:58 | MK2      
因为个人水平有限,怕对于某些方面的认识不完全正确而导致自己的文章误导别人,所以就不公开在首页了``````这些文章都是自己的学习中的一些点滴```
  回复  引用  查看    
#3楼 2007-01-08 14:51 | 兰亭      
嗯,不错,希望NBear能改进一下

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-11-30 12:54 编辑过


相关链接: