国产探花免费观看_亚洲丰满少妇自慰呻吟_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
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遵义县| 三河市| 大冶市| 阳东县| 塔河县| 固镇县| 开原市| 绿春县| 金门县| 普宁市| 麦盖提县| 汉川市| 巧家县| 甘德县| 临西县| 谢通门县| 新竹市| 桂东县| 信丰县| 运城市| 彭水| 曲松县| 淳安县| 垫江县| 福州市| 宁乡县| 玛纳斯县| 太谷县| 石林| 德格县| 宽甸| 新兴县| 肥东县| 宜春市| 育儿| 临洮县| 临安市| 于都县| 青神县| 手游| 板桥市|