日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > Sqlserver > SQL Server 大量數據的分頁存儲過程代碼

SQL Server 大量數據的分頁存儲過程代碼

來源:程序員人生   發布時間:2013-10-31 15:38:53 閱讀次數:3236次
OK,我們首先創建一數據庫:data_Test,并在此數據庫中創建一表:tb_TestTable

create database data_Test --創建數據庫data_Test
GO
use data_Test
GO
create table tb_TestTable --創建表
(
id int identity(1,1) primary key,
userName nvarchar(20) not null,
userPWD nvarchar(20) not null,
userEmail nvarchar(40) null
)
GO
然后我們在數據表中插入2000000條數據:

--插入數據
set identity_insert tb_TestTable on
declare @count int
set @count=1
while @count<=2000000
begin
insert into tb_TestTable(id,userName,userPWD,userEmail) values(@count,'admin','admin888','lli0077@yahoo.com.cn')
set @count=@count+1
end
set identity_insert tb_TestTable off
我首先寫了五個常用存儲過程:

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

create procedure proc_paged_with_notin --利用select top and select not in
(
@pageIndex int, --頁索引
@pageSize int --每頁記錄數
)
as
begin
set nocount on;
declare @timediff datetime --耗時
declare @sql nvarchar(500)
select @timediff=Getdate()
set @sql='select top '+str(@pageSize)+' * from tb_TestTable where(ID not in(select top '+str(@pageSize*@pageIndex)+' id from tb_TestTable order by ID ASC)) order by ID'
execute(@sql) --因select top后不支技直接接參數,所以寫成了字符串@sql
select datediff(ms,@timediff,GetDate()) as 耗時
set nocount off;
end
2,利用select top 和 select max(列鍵)

create procedure proc_paged_with_selectMax --利用select top and select max(列)
(
@pageIndex int, --頁索引
@pageSize int --頁記錄數
)
as
begin
set nocount on;
declare @timediff datetime
declare @sql nvarchar(500)
select @timediff=Getdate()
set @sql='select top '+str(@pageSize)+' * From tb_TestTable where(ID>(select max(id) From (select top '+str(@pageSize*@pageIndex)+' id From tb_TestTable order by ID) as TempTable)) order by ID'
execute(@sql)
select datediff(ms,@timediff,GetDate()) as 耗時
set nocount off;
end
3,利用select top和中間變量--此方法因網上有人說效果最佳,所以貼出來一同測試

create procedure proc_paged_with_Midvar --利用ID>最大ID值和中間變量
(
@pageIndex int,
@pageSize int
)
as
declare @count int
declare @ID int
declare @timediff datetime
declare @sql nvarchar(500)
begin
set nocount on;
select @count=0,@ID=0,@timediff=getdate()
select @count=@count+1,@ID=case when @count<=@pageSize*@pageIndex then ID else @ID end from tb_testTable order by id
set @sql='select top '+str(@pageSize)+' * from tb_testTable where ID>'+str(@ID)
execute(@sql)
select datediff(ms,@timediff,getdate()) as 耗時
set nocount off;
end
4,利用Row_number() 此方法為SQL server 2005中新的方法,利用Row_number()給數據行加上索引

create procedure proc_paged_with_Rownumber --利用SQL 2005中的Row_number()
(
@pageIndex int,
@pageSize int
)
as
declare @timediff datetime
begin
set nocount on;
select @timediff=getdate()
select * from (select *,Row_number() over(order by ID asc) as IDRank from tb_testTable) as IDWithRowNumber where IDRank>@pageSize*@pageIndex and IDRank<@pageSize*(@pageIndex+1)
select datediff(ms,@timediff,getdate()) as 耗時
set nocount off;
end
5,利用臨時表及Row_number

create procedure proc_CTE --利用臨時表及Row_number
(
@pageIndex int, --頁索引
@pageSize int --頁記錄數
)
as
set nocount on;
declare @ctestr nvarchar(400)
declare @strSql nvarchar(400)
declare @datediff datetime
begin
select @datediff=GetDate()
set @ctestr='with Table_CTE as
(select ceiling((Row_number() over(order by ID ASC))/'+str(@pageSize)+') as page_num,* from tb_TestTable)';
set @strSql=@ctestr+' select * From Table_CTE where page_num='+str(@pageIndex)
end
begin
execute sp_executesql @strSql
select datediff(ms,@datediff,GetDate())
set nocount off;
end


OK,至此,存儲過程創建完畢,我們分別在每頁10條數據的情況下在第2頁,第1000頁,第10000頁,第100000頁,第199999頁進行測試,耗時單位:ms 每頁測試5次取其平均值
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产一区二区自拍 | 国产2页 | 欧美视频一区二区三区 | 国产欧美久久久久久 | 成年人视频免费在线观看 | 久久国产精品网 | 免费观看一级特黄欧美大片 | 一区网站在线观看 | 天天干狠狠操 | 色婷婷在线播放 | 国产精品日韩欧美一区二区三区 | 欧美精品一区二区三区视频 | 91中文字幕在线视频 | 欧美劲爆第一页 | 日韩一二 | 成人福利一区 | 国产三级久久久 | 中文字幕国产在线视频 | 一二三区在线 | 亚洲电影免费观看 | 久久福利电影 | 国产精品尤物 | 91精品成人久久 | 99re6在线视频 | 亚洲人毛耸耸少妇xxx | 日韩中文字幕av | 欧美一级久久久 | 一区二区三区在线观看视频 | 天堂精品一区 | 成人福利一区 | 国产一二三在线观看 | 欧美精品一区二区三区四区 | 日韩久久激情 | 免费在线毛片 | 国产三级欧美三级 | 视频在线一区二区 | 91视频国产免费 | 中文字幕三区 | 成人av在线一区二区 | 澳门永久av免费网站 | 国产精品视频一区二区三区四 |