查看ADO分頁(yè)的相關(guān)使用說(shuō)明
當(dāng)然同樣可以改造成其他的ADO分頁(yè),PHP語(yǔ)言所使用。為了更好的使用這樣的ADO分頁(yè)代碼,其混合了函數(shù)語(yǔ)言和物件導(dǎo)向程序編制語(yǔ)言,并且完美的適用于編程、算法、技術(shù)和探索性開發(fā),因此可以在使用的過(guò)程當(dāng)中感受到趣味性和吸引力。
1,rs.RecordCount
很顯然,RecordCount就是用來(lái)顯示數(shù)據(jù)庫(kù)表中一共多少條記錄的,也可以形象地說(shuō)表中一共有多少行。經(jīng)常用在分頁(yè)中就是一共有N篇文章等總計(jì)的信息顯示。
2,rs.PageSize
rs.PageSize也就是一頁(yè)的大小,也就表示一張ADO分頁(yè)可以顯示記錄的條數(shù)。值是自己定義的,比如經(jīng)常看到的每頁(yè)顯示N篇文章之類的信息。
3,rs.AbsolutePage 和 rs.pagecount
說(shuō)到分頁(yè),一定不能不提到 rs.AbsolutePage 。記錄集的AbsolutePage屬性最主要的作用就是決定著當(dāng)前顯示的是第幾頁(yè)。它的值是有依據(jù)的,指定了rs.PageSize,那么rs.pagecount的信息值就是rs.RecordCount和rs.PageSize整除結(jié)果。比如:總信息記錄rs.RecordCount共20條,每頁(yè)顯示條數(shù)rs.PageSize設(shè)為5條,那么頁(yè)數(shù)rs.pagecount數(shù)就是20/5=4頁(yè)次,而rs.AbsolutePage則就只能是第1頁(yè),第2頁(yè)……第4頁(yè)。
先看ADO分頁(yè)函數(shù):
這是一種非常高效的分頁(yè)算法。當(dāng)數(shù)據(jù)表中的數(shù)據(jù)量成百上千萬(wàn)的時(shí)候,上面的這種分頁(yè)算法的響應(yīng)時(shí)間是非常短的,通常在幾十毫秒之內(nèi)。原理很簡(jiǎn)單,就是每次分頁(yè),我只取需要的幾十條記錄而已,使用SELECT TOP也正是基于這樣的考慮。
上面的兩個(gè)分頁(yè)算法的例子中,flymorn都使用了時(shí)間字段time來(lái)進(jìn)行ADO分頁(yè),因?yàn)樵谖医佑|的絕大多數(shù)系統(tǒng)中,我們都需要把用戶最近更新(包括新添加的記錄以及新修改過(guò)的老記錄)的內(nèi)容展示在前面,如果僅僅使用自動(dòng)編號(hào)的ID作為排序字段的話,用戶編輯過(guò)的老信息將無(wú)法展示在前面。這就是flymorn使用時(shí)間字段的原因了。
這里又涉及到聚合索引的問(wèn)題了。默認(rèn)情況下,我們是以自動(dòng)編號(hào)ID作為主鍵,并且用作聚合索引列,如果上面的算法中,使用這樣的ID列來(lái)排序的話,效率會(huì)更高,數(shù)據(jù)庫(kù)響應(yīng)的時(shí)間會(huì)更少;然而,我提到了最近更新的內(nèi)容需要展示在前面的問(wèn)題。#t#
所以,我們必須使用時(shí)間字段來(lái)排序。因此,為了更高的分頁(yè)效率,我們可以在數(shù)據(jù)庫(kù)設(shè)計(jì)的時(shí)候,把這個(gè)時(shí)間字段設(shè)計(jì)為聚合索引列。 通過(guò)這樣的設(shè)計(jì)后,整個(gè)分頁(yè)效率就會(huì)得到非常高的提高了。
然而,把這個(gè)時(shí)間字段作為聚合索引列,存在又一個(gè)小問(wèn)題。因?yàn)閿?shù)據(jù)表在排列數(shù)據(jù)的時(shí)候,是按照聚合索引列來(lái)進(jìn)行物理排序的,當(dāng)用戶添加數(shù)據(jù)的時(shí)候,沒(méi)有什么問(wèn)題,在數(shù)據(jù)表的末尾添加就行了;當(dāng)用戶編輯信息的時(shí)候。
數(shù)據(jù)庫(kù)需要根據(jù)這個(gè)聚合索引列,把剛編輯過(guò)的信息也提到表的末尾,這里就需要耗費(fèi)一定的時(shí)間了。就是說(shuō),當(dāng)我們以時(shí)間字段為聚合索引列的時(shí)候,我們就需要在 ADO分頁(yè)的時(shí)候多耗費(fèi)一點(diǎn)的時(shí)間。