MS-SQLページングnot inメソッド改良の使用row_number
10622 ワード
前回のブログでnot inとmaxminのページング効率を比較しましたが、今回はrow_numberページング効率はどうですか
ネットでrowを1つすりましたnumberのページング・ストレージ・プロシージャ、ソース・アドレス:http://bbs.csdn.net/topics/300185125、ここで少し修正して、より柔軟にします.
not in maxminとrow_Number三者sql:
実行結果:
このことから,3つのページング効率は高い順から低い順にMaxMin,row_であると結論した.number、not in!
ネットでrowを1つすりましたnumberのページング・ストレージ・プロシージャ、ソース・アドレス:http://bbs.csdn.net/topics/300185125、ここで少し修正して、より柔軟にします.
create proc Proc_TablePage
--
@tablename nvarchar(20),
--
@selcolumn nvarchar(1000),
--
@sortcolumn nvarchar(255),
--
@pagecount int,
--
@pageindex int
as
declare @beginrow int
declare @endrow int
set @beginrow=0
set @endrow=0
set @beginrow=(@pageindex-1)*@pagecount+1
set @endrow=@pageindex*@pagecount
declare @sqlstr nvarchar(4000)
set @sqlstr='with table1 as(select '+ @selcolumn +',ROW_NUMBER() OVER(ORDER BY '+ @sortcolumn+' ) AS ROW'+
' FROM '+@tablename+') '
set @sqlstr=@sqlstr +' SELECT '+ @selcolumn +' FROM TABLE1 WHERE ROW BETWEEN '+cast(@beginrow as nvarchar )+' and '+cast(@endrow as nvarchar)
exec(@sqlstr)
not in maxminとrow_Number三者sql:
declare @t datetime
set @t = getdate()
select top 10 ID,U_Name,U_Age,U_Sex,U_Address from Test1 where ID not in (select top 9990 ID from Test1 order by ID desc) order by ID desc
select [not in ( )]=datediff(ms,@t,getdate())
declare @u datetime
set @u = getdate()
exec Proc_TablePage 'Test1',' ID, U_Name,U_Age,U_Address,U_Sex ','ID desc',10,1000
select [Row_Number ( )]=datediff(ms,@u,getdate())
declare @q datetime
set @q = getdate()
select top 10 ID,U_Name,U_Age,U_Sex,U_Address from Test1 where ID <=(select min(ID) from (select top 9991 ID from Test1 order by ID desc) as T) order by ID desc
select [Min ( )]=datediff(ms,@q,getdate())
実行結果:
このことから,3つのページング効率は高い順から低い順にMaxMin,row_であると結論した.number、not in!