2011-08-14 56 views
0

嗨,大家好我正在使用自定義分頁,我得到的數據與此查詢。選擇第n個數字表現?

DECLARE @pageIndex INT = 0; 
DECLARE @pageSize INT = 10; 
WITH foo AS (
    SELECT ROW_NUMBER() OVER (ORDER BY test ASC) as rownumber, test, col 
    FROM TestDB.dbo.test 
) 
SELECT test, col FROM foo 
WHERE rownumber BETWEEN (@pageIndex * @pageSize) + 1 AND (@pageIndex * @pageSize) + @pageSize 

它的工作原理應該如此,但我必須考慮性能如此,這裏是問題。
哪種方式更適合SQL Server性能?
在表中選擇整個數據然後在asp.net,php等中進行分頁,或者用上面描述的方法選擇數據。
我有點困惑,因爲我上面描述的方法是選擇整個數據,並給每行的行號,然後選擇行數在X和Y之間。

回答

3

我認爲沒有明顯的答案題。這取決於以下條件:

  1. 您分頁的數據量有多大。
  2. 您需要多長時間才能訪問這些數據(即一次有多少客戶端訪問數據)。

如果你有大量的數據,我會去SQL分頁,這應該更快,因爲數據庫引擎爲此進行了優化(假設你有正確的索引創建)。 但是,如果您的數據量很小(可以裝入內存),您可以加載所有數據,並且可以提高性能,因爲IO不會成爲瓶頸。

一般來說,我會去SQL分頁,這是更容易維護和優化,如果你的數據集增長。無論如何,如果io開始成爲瓶頸,根據您的資源,您可以複製數據庫,更改硬件等,而無需重寫正在運行的應用程序。

總結:它確實取決於:)。

3

有沒有一種解決辦法適合所有的情況下

如果您有不超過幾頁多,那麼它可能在網頁中更好的頁面。

我們的經驗是,網頁分頁爲我們工作:我們使用div來顯示更多的結果,所以所有的數據都被渲染,沒有到Web或數據庫服務器的往返。更實際的是,我們的觀點是,超過幾頁的結果對用戶來說是無用的,因此它被封頂了。所以我們有一個有限且合理的數據量來管理,而不需要向SQL跳轉。