在ASP中使用均速分頁法提高分頁速度的方法
來源:互聯網
上載者:User
均速分頁法
一、適用範圍
均速分頁法主要適用於文章系統,新聞系統等排序方法固定的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的資料都取出來,然後按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]
[article_1] id int IDENTITY (1, 1) NOT NULL, artid int, classid int default 0, title varchar(100), addtime datetime
把多出來的零頭資料加入這個表中。
2、資料的顯示
定義pagecount是[page_1]的記錄數
我們分兩種情況來
(1)如果article_1沒有記錄(沒有零頭資料)
第一頁是84,83
第二頁是82,81
第三頁是80,79
……
第N頁是 : pagecount-(2*N-2), pagecount-(2*N-2)-1
(2)如果article_1有記錄(有零頭資料)
第一頁,調用article_1的資料,84
第二頁,83,82
……
第N頁是 : pagecount-(2*N-3), pagecount-(2*N-3)-1
說明一下:其中84,83等等這些數字,就是在page_1中,你對應的str編號XXX
說到這裡可能大家就比較明白了,均速分頁法的原理實際是原來把頁面分好,在分頁的時候直接用頁面進行拼接。這比每次分頁的時候從資料庫裡直接調用資料再進行分頁要來得省資源。
同時,還可以說明一點的是,你完全可以不建立page_1表,而把這些str儲存為HTML,然後在分頁的時候讀取出HTML頁面進行拼接。
3、資料的添加
在傳統的HTML分頁中,添加新資料後,要把所有的HTML分頁重建一次,在均速分頁法中,就無需這樣。我們前面已經設定了每個小頁面只顯示20條記錄,那麼article_1表中,也只儲存最多19條記錄。我們新添加一條記錄,那麼同時把這條記錄加入到article_1中,如果article_1中的資料已經超19,那麼就把這裡面的資料產生一個str,加上編號後儲存在[page_1]裡,當然,如果你是用產生HTML的,你可以直接產生一個HTML。如果article_1中的資料已經沒有超19,那麼就不用管它了。
四、均速分頁法和傳統分頁的比較
我用了兩千條資料的一個資料庫進行測試,在XP系統下,P3 1G,256M記憶體的硬體條件下,用均速分頁法平均速度在50MS,正負不超過10MS,用普通ADO分頁,速度在85MS,正負在20-35MS之間,可見用均速分頁法,在速度和穩定性上都是不錯的。
當然,對於資料庫小的情況下,這樣的優勢可能並不明顯,或者可能用ADO分頁來的更快,但是如果在兩萬條資料的分頁中,均速分頁法的平均速度是普通ADO分頁法的一半。
當然,均速分頁法也有自己的不足,比如程式複雜度比傳統分頁來的高,在資料庫少的時候效能不如ADO。
五、最後一點說明:
本文主要介紹的是均速分頁法的一個原理,我花了一個晚上用程式進行了實踐,是可行的。但我主要是把str產生HTML後讀取,與本文介紹的資料庫儲存str有點不同,不過原理是一樣的。
如果您有條件使用SQL資料庫,那麼我建議您還是使用預存程序來實現分頁的提速。
如果您有什麼疑問,可以http://www.showc.com/中與我交流