北京赛车单双技巧 北京赛车pk10黑客软件 北京pk10计划免费软件 pk10前二做号工具 pk10专业预测 pk10民间高手 北京pk10挂机选号经验分享模式 pk10冠军3码倍投计划 北京赛车计划app手机版 北京赛车开奖软件 pk10最牛稳赚模式最新 pk10全天免费计划 易算北京pk10准不准 pk10赛车7码技巧 pk10八码滚雪球3期一收

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

9/1/2015來源:SQL技巧人氣:1594

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

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

測試環境

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

軟件:Windows server 2003 + Sql server 2005

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

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

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

復制代碼1--插入數據2setidentity_inserttb_TestTableon3[email protected][email protected]=15[email protected]<=20000006begin7insertintotb_TestTable(id,userName,userPWD,userEmail)values(@count,'admin','admin888','[email protected]')8[email protected][email protected]+19end10setidentity_inserttb_TestTableoff復制代碼

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

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

復制代碼1createprocedureproc_paged_with_notin--利用selecttopandselectnotin2(3@pageIndexint,--頁索引4@pageSizeint--每頁記錄數5)6as7begin8setnocounton;9[email protected]耗時10[email protected](500)11[email protected]=Getdate()12[email protected]='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;9[email protected][email protected](500)11[email protected]=Getdate()12[email protected]='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)6as7[email protected][email protected][email protected][email protected](500)11begin12setnocounton;13[email protected]=0,@ID=0,@timediff=getdate()14[email protected][email protected]+1,@[email protected]<[email protected]*@[email protected]_testTableorderbyid15[email protected]='selecttop'+str(@pageSize)+'*fromtb_testTablewhereID>'+str(@ID)16execute(@sql)17selectdatediff(ms,@timediff,getdate())as耗時18setnocountoff;19

pk10有什么方法平刷
北京赛车单双技巧 北京赛车pk10黑客软件 北京pk10计划免费软件 pk10前二做号工具 pk10专业预测 pk10民间高手 北京pk10挂机选号经验分享模式 pk10冠军3码倍投计划 北京赛车计划app手机版 北京赛车开奖软件 pk10最牛稳赚模式最新 pk10全天免费计划 易算北京pk10准不准 pk10赛车7码技巧 pk10八码滚雪球3期一收
广东快乐10分开奖玩法 时时彩定位胆七码倍投 大乐透查询是否中奖 杰克棋牌官网菲律宾下载 时时彩怎么才能稳赚 12选5复式投注表 黑龙江11选5实时走势图 冠军足球物语2隐藏球员 山西11选5任2推荐