一種效率極高的ASP分頁思想

2021-04-02 03:17:38 字數 3277 閱讀 5759

一種效率極高的asp分頁思想

在asp中顯示大量資料時的翻頁問題已經有不少文章介紹過了,一般情況下利用ado頁定位方法實現翻頁功能。但隨著資料庫內容增多,翻頁的效率問題就突出了,ado的頁定位方法速度明顯地有些令人不能容忍。 

由於接觸asp的時間不長,從思路到實現還有一段距離,故在乙個論壇中提出了這個想法與大家討論,經過該論壇版主和網友們的分析、建議和指教逐步完成了這段**,在我的老pii機器上進行檢測,效果比較明顯。在此特詳細思路、解決辦法、**貼出請各位高人指教。 

一、原則 

1.每次重新整理頁面時根據翻頁的方向,唯讀取自id1或id2開始的rows條紀錄。 

2.顯示查詢結果時用for/next迴圈,不用where not rs.eof and i<=rows/loop迴圈,目的是在迴圈時不檢驗rs.eof以提高速度。 

3.當紀錄的序號不連續時也能正常完成翻頁功能。 

二、方法 

1.資料表中建立乙個自動編號欄位id用以識別紀錄號。 

2.第一次查詢時讀出所有符合條件的紀錄,用以計算有多少頁(max)和多少條紀錄(num),以後查詢時每次只讀出rows條紀錄,並且不做重複計算。 

3.用sql語句的top rows格式來讀出所需要的資料,翻頁的主要工作在這裡完成。 

4.向前翻頁時用降序排序的方法實現。 

5.用url轉移時帶上每頁的頁號、兩端的端點號、最大頁數、最大紀錄數。 

開始寫**的時候用過復合查詢、公升序排序等種種辦法,結果均不理想,翻頁經常翻到岔路上去,主要問題是如果用where id這段**沒有考慮頁面跳轉的功能,我想除了論壇以外,如果是資料查詢檢索,頁面跳轉的用處不大,尤其是向後跳轉。至於向前跳轉,在**中加入一些指令實現起來不難。 

三、** 

------- 讀取資料部分 ----------- 

dim id1,id2,sn,rows,go,sql,max,num 

sql="select * from 資料表 where 查詢條件" 

go=request("go") 

sn=1 

rows=10 

id1=request("id1") 

if id1<>"" then 

sql=left(sql,6)&" top "&rows&right(sql,len(sql)-6) 

if go="*" then 

sn=request("sp")-1 

sql=sql & " and id<"&id1&" order by id desc" 

else 

sn=request("sp")+1 

id2=request("id2") 

sql=sql & " and id>"&id2 

end if 

end if 

set rs=server.createobject("adodb.recordset") 

rs.open sql,conn,3,1 

if rs.eof or rs.bof then 提示沒有紀錄並返回

------- 計算部分 ----------- 

if id1="" then 

num=rs.recordcount 

max=int(num/rows+0.99) 

if max<1 then 

rows=num 

max=1 

end if 

else 

max=int(request("m")) 

num=request("n") 

end if 

------- 顯示子程式 ----------- 

sub show(i) 

response.write 顯示的內容 

end sub 

%> 

------- 資料顯示部份 ----------- 

有【<%=num%>】條資訊,第 <%=sn%> 頁 共 <%=max%> 頁

四、測試對比 

5萬條紀錄的access資料庫(大小為26.2m),用了幾種方法分別進行執行時間測試,結果如下: 

------------------------------------------ 

頁號 |ado頁定位|bookmark|list.asp|記憶端點 

------------------------------------------ 

1  10.66   10.98  10.71  9.71 

2  6.59     7.48  6.70   0.66 

3  6.42     7.73  6.58   0.27 

4  6.53    7.68  6.48   0.27 

5  6.37    7.68  6.60   0.33 

6  6.65    7.52  6.58   0.33 

7  6.41    7.53  6.49   0.27 

8  6.36    8.19  6.64   0.27 

9  6.31    7.85  6.54   0.33 

10  6.43    7.58  6.53   0.33 

11  6.48    7.57  6.53   0.33 

10  6.43    7.53  6.63   0.38 

9  6.54    7.64  6.53   0.33 

8  6.41    7.57  6.58   0.33 

7  6.42    7.68  6.53   0.32 

6  6.42    7.57  6.48   0.33 

5  6.41    7.65  6.63   0.27 

4  6.37    7.62  6.48   0.33 

3  6.48    7.59  6.47   0.32 

2  6.75    7.60  6.52   0.28 

1  6.53    7.61  6.48   0.32 

------------------------------------------ 

list.asp是論壇中ywd1520朋友提供的從動網裡分離出來的分頁程式,bookmark是某版主朋友提供的分頁程式,時間單位:秒。 

測試環境: 

清除所有快取檔案,用相同的頁面和查詢條件,檢索出5萬條符合要求的紀錄,順序翻頁,先向後再向前。每頁10條紀錄,每條紀錄4個字段。 

硬體配置:pii350超外頻至133m使用,256m sdram記憶體,5.1g昆騰硬碟 

作業系統:winme, pws, ms access2000 

盼各位高人指教,謝謝。

一種asp分頁方法

webpagesize 10 每頁顯示的資訊數量 查表語句 sql select from topic set info server.createobject adodb.recordset info.open sql,conn,1,1 查表語句結束 分頁語句 page intsql reques...

一種編碼思想

舉例子,分類任務中,一般我們會根據類別個數確定輸出的通道,但是這樣不是那麼環保 如果類別個數發生變化,就需要修改網路結構,至少是輸出層要修改 這樣帶來的問題就很明顯,需要重新訓練,儘管可以加在前面的預訓練權重 一種應用場景,如人臉門禁系統,公司說不定哪天找來了新員工,就需要錄入 如果使用類別確定的輸...

一種分頁的實現

以下 是一種分頁的實現。分別是檔案page.php和page.css。分頁的糾結點在於分頁條中省略號的顯示。實現的基本邏輯是 1,接收瀏覽器端傳過來的想要顯示的頁碼數 page。page get p 2,根據頁碼數 page 以及固定的每頁顯示數 pagesize 從資料庫中取資料。sql sele...