SQL SERVER 2012/ 2014 分頁,用 OFFSET,FETCH NEXT改寫ROW_NUMBER的用法(轉)

寫法:

假裝有個表Shop,其中有一列ShopName,取100000到100050條數據。

ROW_NUMBER 的寫法

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

OFFSET,FETCH 的寫法

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

 

比較:

之所以取十萬條以後的數據,能明顯看出執行時間上的差異。雖然前人們已經給出過很多論證,我這裏還是貼一下比較結果。

先是ROW_NUMBER

 

再是 OFFSET FETCH  

高下立判,後者高效、易懂、語法簡潔有木有!

(但是聽聞超過5000w條數據後,結果不好說,這個我還沒試,手上的庫一般到1000w就拆表了,有興趣的可以試試哦,記得告訴我,咩哈哈哈)

 

私人小筆記:

OFFSET=偏移,跳過

FETCH = 取

另外OFFSET可以單獨使用,如下,既跳過前十萬條:

SELECT ShopName from Shop
ORDER BY ShopName 
OFFSET 100000 ROW

 

 

題外話:

從 SQL SERVER 2000 那個大家還在寫TOP的年代,到2005的ROW_NUMBER,再到2012的OFFSET  FETCH 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章