[小菜一碟] 還在用 ROW_NUMBER() 處理分頁嗎?來試試 OFFSET / FETCH 吧。

ROW_NUMBER() 是在 2008 的時候出現的,自從它出現之後,我做分頁查詢就都是用它來做,從 SQL Server 2012 開始出現了 OFFSET / FETCH,它類似於 C# 中的 Skip() / Take() 這種跳過幾筆取幾筆的方式,知道之後就都改用 OFFSET / FETCH 來做分頁查詢。

原本 ROW_NUMBER() 的用法是依照我們指定的方式排序後,為每一列產生一個序號,再根據我們丟入的頁次及筆數取得查詢結果的第幾筆到第幾筆,來達到分頁的效果。

那麼 OFFSET / FETCH 的用法是在 ORDER BY 之後,根據頁次及筆數來計算應該跳過幾筆取幾筆,來達到分頁的效果。

查詢成本方面,在這個範例上兩種分頁的方式是差不多的,只有在 ROW_NUMBER() 的方式因為要產生序號,還要增加查詢條件,多了一些成本。