一、Offset Fetch Next的用法
sql2012的新分页方式 OFFSET/FETCH NEXT
语法:
OFFSET=偏移,跳过 rowsFETCH = 取 rows only
1.越过1万条,去除50条
SELECT ShopName from Shop ORDER BY ShopName OFFSET 100000 ROW FETCH NEXT 50 ROW ONLY
2.仅使用Offset 跳过
SELECT ShopName from Shop ORDER BY ShopName OFFSET 100000 ROW
二、Offset Fetch next 的性能更好
1.使用Row_number() 方式分页
假装有个表Shop,其中有一列ShopName,取100000到100050条数据。
SELECT * FROM (SELECT ShopName , ROW_NUMBER() OVER(ORDER BY ShopName) as R FROM Shop) t WHERE R>100000 AND R<=100050
2.使用 Offset Fetch方式
SELECT ShopName from Shop ORDER BY ShopName OFFSET 100000 ROW FETCH NEXT 50 ROW ONLY
比较:
之所以取十万条以后的数据,能明显看出执行时间上的差异。虽然前人们已经给出过很多论证,我这里还是贴一下比较结果。
先是ROW_NUMBER
再是 OFFSET FETCH
高下立判,后者既高效又好写易懂有木有!
回顾SqlServer中分页方式的变化:
SqlServer2000时候使用top 的方式
SqlServer2005的时候开始使用Row_Number()
SqlServer2012的时候出现Offset Fetch Next。
更多: