国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

SQL分頁(yè)算法,還可以更好

2024-07-21 02:31:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

分頁(yè)算法,是Web開(kāi)發(fā)人員很關(guān)心的一個(gè)問(wèn)題,幾乎每個(gè)數(shù)據(jù)庫(kù)相關(guān)的應(yīng)用都要涉及到分頁(yè)算法,有很多人寫(xiě)過(guò)這方面的文檔,似乎沒(méi)有什么好討論的了;但實(shí)際上換一種數(shù)據(jù)的表現(xiàn)形式,就可以采用一種更好的分頁(yè)算法,那我們現(xiàn)在就看看還能不能做得更好。

先說(shuō)說(shuō)已有的一些方法。
一是通過(guò) DataGrid 分頁(yè),這種方式最簡(jiǎn)單,但效率不高,需要讀取所需數(shù)據(jù)前面的所有數(shù)據(jù)。
二是通過(guò)指定起始記錄和記錄數(shù)的 DbDataAdapter.Fill 來(lái)填充 DataSet 的分頁(yè)方式,這種方式也簡(jiǎn)單,但同樣效率不高,也需要讀取所需數(shù)據(jù)前面的所有數(shù)據(jù)。
三是通過(guò)多個(gè) select top 和多次排序,從表的中間選取需要的記錄;為了使相鄰頁(yè)的數(shù)據(jù)不重復(fù),需要使用 not in,會(huì)導(dǎo)致在選擇大數(shù)據(jù)量的表格的尾部數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)的性能會(huì)有很大的降低。

假設(shè)我們換一種表格的展現(xiàn)形式,就以傳統(tǒng)的 C/S 應(yīng)用下的帶滾動(dòng)條的 Grid 展現(xiàn)方式為例;其實(shí)這種方式才是數(shù)據(jù)庫(kù)表格最合適的展現(xiàn)方式,而 Web 應(yīng)用下常用的 1,2,3....的頁(yè)碼連接方式或上一頁(yè)、下一頁(yè)按鈕的頁(yè)碼瀏覽條方式,都是不得已而為之,因?yàn)椴荒芡ㄟ^(guò)簡(jiǎn)單的技術(shù),在 Web 應(yīng)用下實(shí)現(xiàn)帶滾動(dòng)條的 Grid。

數(shù)據(jù)庫(kù)的表格都是帶有主鍵的,以區(qū)分表格中不同的記錄;用戶界面上的 Grid 里的數(shù)據(jù)從邏輯上也是有主鍵的,否則數(shù)據(jù)會(huì)有歧義,但大多數(shù)的應(yīng)用,沒(méi)有設(shè)置,也無(wú)法知道所讀出數(shù)據(jù)的主鍵;即使少數(shù)應(yīng)用設(shè)置了,也知道所讀數(shù)據(jù)的主鍵,但并沒(méi)有將其應(yīng)用到分頁(yè)中;其實(shí)只要知道了所讀數(shù)據(jù)的主鍵,就可以非常容易的進(jìn)行分頁(yè)。

首頁(yè)的算法很簡(jiǎn)單
 select top 頁(yè)大小 * from 表名 order by 主鍵

對(duì)于帶滾動(dòng)條的表格,數(shù)據(jù)是一頁(yè)一頁(yè)順序滾動(dòng),即使拖動(dòng)滾動(dòng)條,也可以一頁(yè)頁(yè)滾動(dòng)到所選的位置,當(dāng)拖動(dòng)到一個(gè)新頁(yè)時(shí)的算法為
select top 頁(yè)大小 * from 表名 where 主鍵 > 上一頁(yè)末記錄的主鍵 order by 主鍵

如果采用了緩存的方式,所有的數(shù)據(jù)都只需要下載一次,只有滾動(dòng)到尾部時(shí),才下載新的數(shù)據(jù)。

這種算法要求知道 Grid 中數(shù)據(jù)的主鍵,并將主鍵的數(shù)據(jù)應(yīng)用到分頁(yè);對(duì)于多主鍵和排序的表格,算法是一樣的,只是語(yǔ)句復(fù)雜了一些。不但可以從首頁(yè)開(kāi)始,也可以從末頁(yè)開(kāi)始,向前翻滾。
這個(gè)算法的性能沒(méi)有問(wèn)題,對(duì)于不論多大的表,選擇那個(gè)位置的記錄都是一樣的,比較適合于用首頁(yè)、上一頁(yè)、下一頁(yè)和末頁(yè)的分頁(yè)選擇方式,更適合于帶滾動(dòng)條的 Grid ;不適合于指定頁(yè)碼的分頁(yè)。

采用該算法的帶滾動(dòng)條的 Grid 可以參考我們的演示 www.BizStruct.cn。

請(qǐng)您在提出疑問(wèn)時(shí),先考慮兩點(diǎn),否則可能認(rèn)識(shí)不到這個(gè)算法和我們系統(tǒng)結(jié)合的優(yōu)勢(shì):
第一:傳統(tǒng)的 C/S 應(yīng)用的表格和Web上的分頁(yè)表格,誰(shuí)更便利。
第一,我們實(shí)現(xiàn)的帶滾動(dòng)條的表格,和傳統(tǒng)的 C/S 應(yīng)用的表格的差別有多大。

對(duì)回復(fù)的解釋:
有的回復(fù)提出無(wú)法實(shí)現(xiàn)“跳轉(zhuǎn)到xx頁(yè)”這樣的操作。
可我們想想,在 C/S 的應(yīng)用環(huán)境下,如果誰(shuí)用這種頁(yè)面跳轉(zhuǎn)的方式,大家肯定會(huì)覺(jué)得怪異。
而我們實(shí)現(xiàn)的帶滾動(dòng)條的 Grid 在局域網(wǎng)環(huán)境下,速度幾乎和以前的 C/S 應(yīng)用差不多,在廣域網(wǎng)的情況下,速度也很快。
Web 應(yīng)用的“跳轉(zhuǎn)到XX頁(yè)的操作”實(shí)際上是不得已而為之,如果能實(shí)現(xiàn) 傳統(tǒng)的 C/S 應(yīng)用的Grid,為什么還要用這個(gè)呢?


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 九台市| 卢龙县| 邢台市| 荃湾区| 鄯善县| 高阳县| 望奎县| 扶沟县| 新平| 沈阳市| 边坝县| 韩城市| 九江市| 林周县| 兰西县| 宁都县| 紫金县| 左贡县| 化隆| 揭西县| 广南县| 高雄县| 芷江| 成安县| 富顺县| 观塘区| 阜新| 宁陵县| 梨树县| 鹰潭市| 赫章县| 舞钢市| 仁布县| 梁山县| 奉贤区| 比如县| 德昌县| 甘肃省| 永寿县| 乐昌市| 许昌市|