[转]几种常用分页算法运行效率大比拼
2010-08-30 17:08
274 查看
算法一:
sql语句:select * from [ABCD] order by stu_id
分页原理:把所有的记录都查出来,再用记录集的一些方法得到总页数和指定当前页次。每次翻页都要重复查询一次相同的数据。
ASP中用rs.pagesize设定每页的记录数,用rs.pagecount得到总页数,用rs.absolutepage指定当前的页次。
JSP中用rs.getRow()得到记录条数,用rs.absolute(posion)指定当前记录的位置。
算法评价:这个是效率最低的分页方式,但是一般的书上用的最多的分页方式,很多人最开始做asp或者jsp都是用这种方式分页。但不管什么情况下都不推荐用这种分页方式。
我做这个测试的时候每翻一次页都要用4500ms左右。这个数据是在asp环境中测得的,jsp下没有测,估计应该差不多。
算法二:
sql语句:select top {pagesize} * from [ABCD] where stu_id not in(select top {(currentpage-1)*pagesize} stu_id from [ABCD] order by stu_id) order by stu_id分页原理:先用select count(*) from [ABCD]查出记录条数,再据此算出总页数totalpage=(totalcount+pagesize-1)/pagesize;查询数据时先从数据库中查出本页前面所有的数据,再从数据库中剩下的数据中查出前pagesize条。比如现在正在显示的是第5页,怎么查出第6页的数据呢?先把前5页的25条数据查出来,再从数据库中剩下的99975条记录中查出前5条。
算法评价:在我测试的三种算法中,这个是效率最高的算法。前几十页中每翻一页要30-40ms,随着页数增加时间也在增加,最高的时候在400-500ms之间。
算法三:
sql语句:select * from (select top {pagesize} * from (select top {currentpage*pagesize} * from [ABCD] order by stu_id) as A order by stu_id Desc) as B order by stu_id分页原理:首先按照升序得到前currengpage*pagesize行的结果集A,然后按照降序从A中得到后pagesize行的结果集B,最后按照升序对B进行重新排序,返回结果集。比如:现在页面上显示的是第5页数据,得到第6页数据的方法是:先从数据库中查出前30条记录,再查出这30条记录的后5条,把这5条记录按正序重新排序后返回结果。
算法评价:这个是效率比较高的算法。前面几十页的执行效率与算法二不相上下,但随着页数据增加时间也在增加,最高的时候在500-600ms之间。
sql语句:select * from [ABCD] order by stu_id
分页原理:把所有的记录都查出来,再用记录集的一些方法得到总页数和指定当前页次。每次翻页都要重复查询一次相同的数据。
ASP中用rs.pagesize设定每页的记录数,用rs.pagecount得到总页数,用rs.absolutepage指定当前的页次。
JSP中用rs.getRow()得到记录条数,用rs.absolute(posion)指定当前记录的位置。
算法评价:这个是效率最低的分页方式,但是一般的书上用的最多的分页方式,很多人最开始做asp或者jsp都是用这种方式分页。但不管什么情况下都不推荐用这种分页方式。
我做这个测试的时候每翻一次页都要用4500ms左右。这个数据是在asp环境中测得的,jsp下没有测,估计应该差不多。
算法二:
sql语句:select top {pagesize} * from [ABCD] where stu_id not in(select top {(currentpage-1)*pagesize} stu_id from [ABCD] order by stu_id) order by stu_id分页原理:先用select count(*) from [ABCD]查出记录条数,再据此算出总页数totalpage=(totalcount+pagesize-1)/pagesize;查询数据时先从数据库中查出本页前面所有的数据,再从数据库中剩下的数据中查出前pagesize条。比如现在正在显示的是第5页,怎么查出第6页的数据呢?先把前5页的25条数据查出来,再从数据库中剩下的99975条记录中查出前5条。
算法评价:在我测试的三种算法中,这个是效率最高的算法。前几十页中每翻一页要30-40ms,随着页数增加时间也在增加,最高的时候在400-500ms之间。
算法三:
sql语句:select * from (select top {pagesize} * from (select top {currentpage*pagesize} * from [ABCD] order by stu_id) as A order by stu_id Desc) as B order by stu_id分页原理:首先按照升序得到前currengpage*pagesize行的结果集A,然后按照降序从A中得到后pagesize行的结果集B,最后按照升序对B进行重新排序,返回结果集。比如:现在页面上显示的是第5页数据,得到第6页数据的方法是:先从数据库中查出前30条记录,再查出这30条记录的后5条,把这5条记录按正序重新排序后返回结果。
算法评价:这个是效率比较高的算法。前面几十页的执行效率与算法二不相上下,但随着页数据增加时间也在增加,最高的时候在500-600ms之间。
相关文章推荐
- 几种常用排序算法运行效率比较
- 发现一种简单高效的Hash算法,比常用的几种算法效率高出一倍以上
- 几种常用排序算法运行效率比较
- 几种常见SQL分页方式效率比较
- 【测试】两种数据库,四种分页算法的效率比较
- 巧用头脑思考,提高软件运行效率-浅谈程序算法
- DataGrid自定义分页以及几种常用的删除方法
- DataGrid自定义分页以及几种常用的删除方法
- Ceres solver中几种常用算法介绍
- 两种数据库,四种分页算法的效率比较
- 几种常用的算法
- 两种数据库,四种分页算法的效率比较
- 几种常见SQL分页方式效率比较
- 常用几种人脸对齐算法ASM/AAM/CLM/SDM
- 常用的SQL分页算法及对比
- 几种分页算法
- 一步步学习数据结构和算法之常用排序效率分析及java实现
- Tonemapping常用的几种算法
- C_C+++常用算法整理+可运行
- 几种常用的分页技术