15

我在舊的ROW_NUMBER(SQL Server 2008中)的情況下一些問題和新的OFFSET + FETCH(SQL Server 2012中)SQL Server提供分頁機制2012年SQL Server中較舊的row_number()和較新的基於OFFSET + FETCH的分頁之間有什麼區別?

  1. 什麼是與ROW_NUMBER的限制() ?
  2. OFFSET + FETCH是row_number()的改進替代品嗎?
  3. 是否有任何使用案例只能使用一個而不使用另一個?
  4. 兩者之間有任何性能差異嗎?如果是,建議哪一個?

謝謝。

+2

你檢查過嗎?看到這個相當全面的答案:http://dba.stackexchange.com/questions/30210/why-are-there-execution-plan-differences-between-offset-fetch-and-the-old-st – 2013-05-05 07:34:57

回答

13

使用ROW_NUMBER()工作正常 - 它只是比必要的更多的工作;您需要圍繞實際查詢編寫「框架」CTE,將ROW_NUMBER()列添加到您的輸出集中,然後對其進行過濾。

使用新OFFSET/FETCH簡單 - 是的,它也獲得更好的性能,因爲這兩個環節可以告訴你:

所以,總體來說:如果你'使用 SQL Server 2012 - 那麼你應該肯定使用OFFSET/FETCH而不是ROW_NUMBER()尋呼

+0

這看起來很坦白,但我不知道如何強制2012年SQL服務器使用EF套件? – 2013-11-01 11:01:27

1

根據本第3條尋呼技術的比較和導致圖表是有用的選擇方法來尋呼

Sql Server 2012 Paging Methods

所有的小記錄做工精細號碼呼叫方法的,但是當增長數的記錄後的時間差異打賭韋方法似乎直接

相關問題