SQL SERVER 2012/ 2014 分页,用 OFFSET,FETCH NEXT改写ROW_NUMBER的用法(转)

写法:

伪装有个表Shop,其中有一列ShopName,取100000到100050条数据。3d

ROW_NUMBER 的写法code

SELECT * FROM
(
SELECT ShopName , ROW_NUMBER() OVER(ORDER BY ShopName) as R FROM Shop
) t WHERE R>100000 AND R<=100050

OFFSET,FETCH 的写法blog

SELECT ShopName from Shop
ORDER BY ShopName 
OFFSET 100000 ROW
FETCH NEXT 50 ROW ONLY

 

比较:

之因此取十万条之后的数据,能明显看出执行时间上的差别。虽然前人们已经给出过不少论证,我这里仍是贴一下比较结果。class

先是ROW_NUMBER语法

 

再是 OFFSET FETCH  im

高下立判,后者高效、易懂、语法简洁有木有!数据

(可是听闻超过5000w条数据后,结果很差说,这个我还没试,手上的库通常到1000w就拆表了,有兴趣的能够试试哦,记得告诉我,咩哈哈哈)db

 

私人小笔记:

OFFSET=偏移,跳过img

FETCH = 取di

另外OFFSET能够单独使用,以下,既跳过前十万条:

SELECT ShopName from Shop
ORDER BY ShopName 
OFFSET 100000 ROW

 

 

题外话:

从 SQL SERVER 2000 那个你们还在写TOP的年代,到2005的ROW_NUMBER,再到2012的OFFSET  FETCH 

相关文章
相关标签/搜索