当然同样可以改造成其他的ADO分页,PHP语言所使用。为了更好的使用这样的ADO分页代码,其混合了函数语言和物件导向程序编制语言,并且完美的适用于编程、算法、技术和探索性开发,因此可以在使用的过程当中感受到趣味性和吸引力。
1,rs.RecordCount
很显然,RecordCount就是用来显示数据库表中一共多少条记录的,也可以形象地说表中一共有多少行。经常用在分页中就是一共有N篇文章等总计的信息显示。
2,rs.PageSize
rs.PageSize也就是一页的大小,也就表示一张ADO分页可以显示记录的条数。值是自己定义的,比如经常看到的每页显示N篇文章之类的信息。
3,rs.AbsolutePage 和 rs.pagecount
说到分页,一定不能不提到 rs.AbsolutePage 。记录集的AbsolutePage属性最主要的作用就是决定着当前显示的是第几页。它的值是有依据的,指定了rs.PageSize,那么rs.pagecount的信息值就是rs.RecordCount和rs.PageSize整除结果。比如:总信息记录rs.RecordCount共20条,每页显示条数rs.PageSize设为5条,那么页数rs.pagecount数就是20/5=4页次,而rs.AbsolutePage则就只能是第1页,第2页……第4页。
先看ADO分页函数:
这是一种非常高效的分页算法。当数据表中的数据量成百上千万的时候,上面的这种分页算法的响应时间是非常短的,通常在几十毫秒之内。原理很简单,就是每次分页,我只取需要的几十条记录而已,使用SELECT TOP也正是基于这样的考虑。
上面的两个分页算法的例子中,flymorn都使用了时间字段time来进行ADO分页,因为在我接触的绝大多数系统中,我们都需要把用户最近更新(包括新添加的记录以及新修改过的老记录)的内容展示在前面,如果仅仅使用自动编号的ID作为排序字段的话,用户编辑过的老信息将无法展示在前面。这就是flymorn使用时间字段的原因了。
这里又涉及到聚合索引的问题了。默认情况下,我们是以自动编号ID作为主键,并且用作聚合索引列,如果上面的算法中,使用这样的ID列来排序的话,效率会更高,数据库响应的时间会更少;然而,我提到了最近更新的内容需要展示在前面的问题。#t#
所以,我们必须使用时间字段来排序。因此,为了更高的分页效率,我们可以在数据库设计的时候,把这个时间字段设计为聚合索引列。 通过这样的设计后,整个分页效率就会得到非常高的提高了。
然而,把这个时间字段作为聚合索引列,存在又一个小问题。因为数据表在排列数据的时候,是按照聚合索引列来进行物理排序的,当用户添加数据的时候,没有什么问题,在数据表的末尾添加就行了;当用户编辑信息的时候。
数据库需要根据这个聚合索引列,把刚编辑过的信息也提到表的末尾,这里就需要耗费一定的时间了。就是说,当我们以时间字段为聚合索引列的时候,我们就需要在 ADO分页的时候多耗费一点的时间。