僞裝有個表Shop,其中有一列ShopName,取100000到100050條數據。spa
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就拆表了,有興趣的能夠試試哦,記得告訴我,咩哈哈哈)img
OFFSET=偏移,跳過di
FETCH = 取時間
另外OFFSET能夠單獨使用,以下,既跳過前十萬條:
SELECT ShopName from Shop ORDER BY ShopName OFFSET 100000 ROW
從 SQL SERVER 2000 那個你們還在寫TOP的年代,到2005的ROW_NUMBER,再到2012的OFFSET FETCH,猿類同胞們真是不跟緊潮流就要被無情的拋下啊~一塊兒加了個油吧~