MS-SQL分页not in 方法改进之使用row_number
生活随笔
收集整理的這篇文章主要介紹了
MS-SQL分页not in 方法改进之使用row_number
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
上一篇博客對(duì)比了not in 和 max\min分頁(yè)的效率,這次來(lái)看看row_number分頁(yè)效率如何
在網(wǎng)上扒了一個(gè)row_number的分頁(yè)存儲(chǔ)過(guò)程,源地址:http://bbs.csdn.net/topics/300185125,在這里稍加修改,使之更加靈活
create proc Proc_TablePage --表名 @tablename nvarchar(20), --查詢字段 @selcolumn nvarchar(1000), --排序字段 @sortcolumn nvarchar(255), --每頁(yè)記錄數(shù) @pagecount int, --頁(yè)號(hào) @pageindex int as declare @beginrow int declare @endrow intset @beginrow=0 set @endrow=0set @beginrow=(@pageindex-1)*@pagecount+1 set @endrow=@pageindex*@pagecountdeclare @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 max\min 和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方法降序分頁(yè)執(zhí)行花費(fèi)時(shí)間(毫秒)]=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方法降序分頁(yè)執(zhí)行花費(fèi)時(shí)間(毫秒)]=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方法降序分頁(yè)執(zhí)行花費(fèi)時(shí)間(毫秒)]=datediff(ms,@q,getdate())
執(zhí)行結(jié)果:
由此得出結(jié)論:三者的分頁(yè)效率從高到低依次是Max\Min、row_number、not in!
轉(zhuǎn)載于:https://www.cnblogs.com/New-world/archive/2012/11/28/2793520.html
總結(jié)
以上是生活随笔為你收集整理的MS-SQL分页not in 方法改进之使用row_number的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: js实现日期验证
- 下一篇: PostgreSQL消息乱码的解决