分頁儲存過程

2021-05-22 21:12:55 字數 1597 閱讀 2072

在專案中,我們經常遇到或用到分頁,那麼在大資料量(百萬級以上)下,哪種分頁演算法效率最優呢?我們不妨用事實說話。

測試環境

硬體:cpu 酷睿雙核t5750  記憶體:2g

軟體:windows server 2003    +   sql server 2005

ok,我們首先建立一資料庫:data_test,並在此資料庫中建立一表:tb_testtable

然後我們在資料表中插入2000000條資料:

我首先寫了五個常用儲存過程:

1,利用select top 和select not in進行分頁,具體**如下:

2,利用select top 和 select max(列鍵)

3,利用select top和中間變數--此方法因網上有人說效果最佳,所以貼出來一同測試

4,利用row_number() 此方法為sql server 2005中新的方法,利用row_number()給資料行加上索引

5,利用臨時表及row_number

ok,至此,儲存過程建立完畢,我們分別在每頁10條資料的情況下在第2頁,第1000頁,第10000頁,第100000頁,第199999頁進行測試,耗時單位:ms  每頁測試5次取其平均值

存過第2頁耗時

第1000頁耗時

第10000頁耗時

第100000頁耗時

第199999頁耗時

效率排行

1用not in

0ms16ms

47ms

475ms

953ms

32用select max

5ms16ms

35ms

325ms

623ms

13中間變數

966ms

970ms

960ms

945ms

933ms

54row_number

0ms0ms

34ms

365ms

710ms

24臨時表

780ms

796ms

798ms

780ms

805ms4

測試結果顯示:select max >row_number>not in>臨時表》中間變數

於是我對效率最高的select max方法用2分法進行了擴充套件,**取自網際網路,我修改了asc排序時取不到值的bug,測試結果:

2分法156ms

156ms

180ms

470ms

156ms1*

從測試結果來看,使用2分法確實可以提高效率並使效率更為穩定,我又增加了第159999頁的測試,用時僅296ms,效果相當的不錯!

下面是2分法使用select max的**,已相當完善。

執行示例:exec proc_paged_2part_selectmax 'tb_testtable','id,username,userpwd,useremail',10,100000,'id',0,null,'id',0

這種測試只在單機進行,並且沒有在實際開發web專案中分頁測試,測試項也比較單一,所以不夠全面系統,但從其效率相比上,我們可以在資料庫分頁演算法上進行有效的控制。

分頁儲存過程 分頁儲存過程

分頁儲存過程 alter proc dbo p pageshow pagesize int,每頁大小 currentpage int out,當前頁 housename nvarchar 50 房產名稱 totalcount int out,總記錄數 totalpage int out 總頁數 as...

分頁儲存過程

create proc p sobigo percentpage tblname varchar 255 t category 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pag...

分頁儲存過程

create procedure pro select pageindex int,pagesize int as select student.sno,student.sname,student.s grade.math,grade.physics,grade.huaxue,grade.chine...