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

首頁 > 開發 > 綜合 > 正文

大數據量分頁存儲過程效率測試附代碼

2024-07-21 02:50:03
字體:
來源:轉載
供稿:網友
大數據量分頁存儲過程效率測試附代碼

在項目中,我們經常遇到或用到分頁,那么在大數據量(百萬級以上)下,哪種分頁算法效率最優呢?我們不妨用事實說話。

測試環境

硬件:CPU 酷睿雙核T5750 內存:2G

軟件:Windows server 2003 + Sql server 2005

OK,我們首先創建一數據庫:data_Test,并在此數據庫中創建一表:tb_TestTable

按 Ctrl+C 復制代碼按 Ctrl+C 復制代碼

然后我們在數據表中插入2000000條數據:

復制代碼1--插入數據2setidentity_inserttb_TestTableon3declare@countint4set@count=15while@count<=20000006begin7insertintotb_TestTable(id,userName,userPWD,userEmail)values(@count,'admin','admin888','lli0077@yahoo.com.cn')8set@count=@count+19end10setidentity_inserttb_TestTableoff復制代碼

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

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

復制代碼1createprocedureproc_paged_with_notin--利用selecttopandselectnotin2(3@pageIndexint,--頁索引4@pageSizeint--每頁記錄數5)6as7begin8setnocounton;9declare@timediffdatetime--耗時10declare@sqlnvarchar(500)11select@timediff=Getdate()12set@sql='selecttop'+str(@pageSize)+'*fromtb_TestTablewhere(IDnotin(selecttop'+str(@pageSize*@pageIndex)+'idfromtb_TestTableorderbyIDASC))orderbyID'13execute(@sql)--因selecttop后不支技直接接參數,所以寫成了字符串@sql14selectdatediff(ms,@timediff,GetDate())as耗時15setnocountoff;16end復制代碼

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

復制代碼1createprocedureproc_paged_with_selectMax--利用selecttopandselectmax(列)2(3@pageIndexint,--頁索引4@pageSizeint--頁記錄數5)6as7begin8setnocounton;9declare@timediffdatetime10declare@sqlnvarchar(500)11select@timediff=Getdate()12set@sql='selecttop'+str(@pageSize)+'*Fromtb_TestTablewhere(ID>(selectmax(id)From(selecttop'+str(@pageSize*@pageIndex)+'idFromtb_TestTableorderbyID)asTempTable))orderbyID'13execute(@sql)14selectdatediff(ms,@timediff,GetDate())as耗時15setnocountoff;16end復制代碼

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

復制代碼1createprocedureproc_paged_with_Midvar--利用ID>最大ID值和中間變量2(3@pageIndexint,4@pageSizeint5)6as7declare@countint8declare@IDint9declare@timediffdatetime10declare@sqlnvarchar(500)11begin12setnocounton;13select@count=0,@ID=0,@timediff=getdate()14select@count=@count+1,@ID=casewhen@count<=@pageSize*@pageIndexthenIDelse@IDendfromtb_testTableorderbyid15set@sql='selecttop'+str(@pageSize)+'*fromtb_testTablewhereID>'+str(@ID)16execute(@sql)17selectdatediff(ms,@timediff,getdate())as耗時18setnocountoff;19
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台山市| 霍邱县| 重庆市| 张北县| 吉木乃县| 沂源县| 正镶白旗| 健康| 库车县| 洱源县| 谢通门县| 大兴区| 旌德县| 确山县| 修武县| 广汉市| 安多县| 大关县| 和平县| 乐安县| 农安县| 股票| 江安县| 余江县| 门源| 桂阳县| 资源县| 布拖县| 轮台县| 鲜城| 尼玛县| 永城市| 正镶白旗| 芮城县| 勃利县| 雷州市| 泽州县| 定襄县| 天门市| 香格里拉县| 闸北区|