在ASP中使用均速分页法提高分页速度
2024-05-04 11:02:21
供稿:网友
一、适用范围
均速分页法主要适用于文章系统,新闻系统等排序方法固定的ASP+ACCESS应用
二、特点说明
很多用过一些文章系统或是新闻系统的朋友知道,一般的文章系统或是新闻系统,在分类分页时,通常是通过读取数据库中满足条件的排序后数据,然后根据请求页号,通过定位操作,指向某条数据,并且开始读取这条数据后面的若干条数据作为一页。这种分页方法,原理简单,但是存在的问题是每次都需要把数据库中满足条件的排序后数据都读取出来,如果有两千条数据,这个还好,如果有两万条呢?显示,这会占用大量的内存,浪费很多服务器资源。当然,如果有条件的,可以用SQL数据库,这样就好办多了,用一点存储过程就全部解决了。不过可能很多朋友还是在用ACCESS数据库,这样就没有办法了。当然,还有一些程序是把分页生成HTML,就像不少下载站点一样,大家有没有想过,这样会出现什么问题?如果我在后台一次添加一条记录,那么我得把这个分类中所有的分页都重新生成一次HTML,这是肯定的,想想吧,这样效率是不是很差。
均速分页法就是为了解决在ACCESS数据库中,大量数据的分页而想出来的。它兼有HTML分页和传统ADO分页的优点。一是速度快,占用资源少,不管你是第一页还是第一百页,程序速度都是相同的。而且在数据添加时,不必把所有分页都重新生成。下面我把原理介绍一下
三、分页原理
数据库中有一个article表,一个class表,我们不考虑是不是无限级分类还是两级分类,这个与我们无关。
[article] id int IDENTITY (1, 1) NOT NULL, classid int default 0, title varchar(100), addtime datetime
[class] id int IDENTITY (1, 1) NOT NULL, classname varchar(20)
1、生成分页
如果class表中有一行数据是id为1,classname为“ASP分类”,我们先把所有article中所有classid=1的数据都取出来,(www.knowsky.com)然后按addtime升序排列,这个与普通的ADO分面是一样的,但是,下面我们要进行一些处理。
我们动态的在数据库里生成一个表,名字叫[page_1],1就是对应的classname为“ASP分类”的ID自动编号。
[page_1] pagenum int, pagestr text
我们先每20条数据生成一个str,每个str实际就是显示时这20条数据库的列表,然后为这个str编个号XXX,如果是0-19条记录,那么XXX就是001,如果是20-39,XXX就是002,以此类推。把str和它的编号加入page_1中。我们这里假设最大的是84
大家肯定会想到,数据不可能总是整除19(20个数据应该是mod 19)呀,当然,我们要处理一下零头,这些零头应该是最新的数据(我们是按addtime)排列的。我们再动态的建立一个表,[aritcle_1]