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

首頁 > 數據庫 > Access > 正文

DataGrid連接Access的快速分頁法(1)——需求與現狀

2024-09-07 19:04:59
字體:
來源:轉載
供稿:網友
datagrid連接access的快速分頁法(1)——需求與現狀
一、需求分析
datagrid是一個功能強大的asp.net web服務器端控件,它除了能夠按各種方式格式化顯示數據,還可以對數據進行動態的排序、編輯和分頁。大大減輕了廣大web程序員的工作量。實現datagrid的分頁功能一直是很多入門者感到棘手的問題,特別是自定義分頁功能,實現的方法多種多樣,非常靈活。

目前大家公認性能最好的應該數sql sever結合存儲過程的解決方案。因為在sql server的存儲過程里面可以使用游標(cursor)來遍歷數據庫表中所有的行,結合一個計數器變量就可以快速定位到數據庫表中的某一行了。但是在采用access數據庫的asp.net應用程序中,一直沒有一種較好的解決方案。

我們知道,在asp中可以使用ado的游標來快速定位當前頁面的數據在數據庫表中的位置。可是ado.net中沒有游標這個東西,所以傳統的datagrid分頁方法都是用諸如“select * from item”的sql語句從數據庫表中取出所有的記錄,然后datagrid的自動分頁功能會幫你顯示相應分頁的數據。
二、目前的解決方案
很多人已經意識到了上面描述的問題,并提出了解決方法,即采用自定義分頁,每次從數據庫表中取出要顯示的數據。那么,怎樣取呢?答案就我知道的大概有5種以上吧。使用不同的算法,將會得到不同的效率。經過我粗略的測試,最慢的算法耗費的時間大概是最快的3倍!而且這個數字會隨著記錄總數的增加而增加。

為了方便接下來的討論,在展示 sql 語句之前,首先讓我們做如下約定:

pageindex itemid
productid
price
0
001
0011
$12

002
0011
$13

003
0011
$12

1
004
0012
$13

005
0012
$11

006
0012
$14

2
007
0013
$14

008
0013
$12

009
0014
$13

3
010
0011
$13

011
0012
$15

012
0014
$16

4
013
0013
$12

014
0013
$13



變量 用途
@pagesize 每頁顯示的記錄總數
@pagecount 分頁總數
@recordcount 數據表的記錄總數
@pageindex 當前頁的索引
@firstindex 第一頁的索引
@middleindex 中間頁的索引
@lastindex 最后一頁的索引
@tablename 數據庫表名稱
@primarykey 主鍵字段名稱
@queryfields 要查詢的字段集
@condition 篩選條件


定義:
@pagecount = (int)math.ceiling((double)@recordcount / @pagesize)
@firstindex = 0
@lastindex = @pagecount - 1
@middleindex = (int)math.ceiling((double)@pagecount / 2) – 1

預設:
@pagesize = 2
@recordcount = 9
@pagecount = 4

現在先讓我們來看看速度最慢的 sql 語句:

select top @pagesize * from @tablename as a
where @primarykey not in (
select top @pagesize*@pageindex @primarykey from @tablename as b
order by @primarykey
)
order by @primarykey

這條語句慢就慢在 not in 這里,主 select 語句遍歷的每個 @primarykey 的值都要跟子 select 語句的結果集中的每一個 @primarykey 的值進行比較,這樣時間復雜度非常大。其實我們平時編寫 sql 語句的時候應該盡量避免用 not in 語句,因為它往往會提高整個 sql 語句的時間復雜度。

還有一種是用兩個 top 的 sql 語句,如下所示:

select * from (
select top @pagesize * from (
select top @pagesize*(@pageindex+1) * from @tablename
order by @primarykey
) tablea
order by @primarykey desc
) tableb
order by @primarykey

這條 sql 語句空間復雜度比較大。如果要顯示的分頁面剛好是最后一頁,那么它的效率比直接select 出所有的記錄還要低。

下一篇將詳細介紹一種最快的算法,并根據不同情況,采用不同的變形來有效的提高查詢效率。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 边坝县| 顺义区| 堆龙德庆县| 伊宁县| 旬邑县| 盘山县| 云和县| 安远县| 太保市| 交城县| 高淳县| 湘潭县| 常宁市| 开封市| 清丰县| 林甸县| 和林格尔县| 家居| 舟曲县| 富源县| 抚顺市| 余庆县| 宾阳县| 房产| 平阴县| 疏勒县| 铁岭县| 临城县| 克东县| 新泰市| 临清市| 保德县| 营口市| 拜城县| 德庆县| 依兰县| 华容县| 桑日县| 德保县| 桐柏县| 延长县|