2010-03-15 65 views
15

用於大於1,000,000行並且可能還有更多數目的表!在sql 2008中使用大型表進行高效分頁

還沒有做任何基準自己所以想得到專家的意見。

看了看ROW_NUMBER()的一些文章,但它似乎會影響性能

什麼其他的選擇/替代方案?

+0

你介意共享顯示row_number()不執行的文章... – 2010-03-15 04:13:58

+0

除了最瑣碎的查詢之外,所有的查詢都需要索引和最新的統計信息才能正常運行。 – 2010-03-15 04:22:17

+0

Duplicate:http://stackoverflow.com/questions/1897436/row-number-over-not-fast-enough-with-large-result-set-any-good-solution – 2010-03-15 04:24:51

回答

18

我們使用row_number()的效果很好,並沒有真正的性能問題。我們的分頁查詢的基本結構是這樣的:

WITH result_set AS (
    SELECT 
    ROW_NUMBER() OVER (ORDER BY <ordering>) AS [row_number], 
    x, y, z 
    FROM 
    table 
    WHERE 
    <search-clauses> 
) SELECT 
    * 
FROM 
    result_set 
WHERE 
    [row_number] BETWEEN a AND b 

它工作正常,我們用> 1,000,000行的表。

+0

我的理解是性能是服務器負載和服務器資源等的一個函數,請參閱上述備註中的兩個鏈接pov – Kumar 2010-03-16 00:55:04

+2

正如我所說的,我們實際在具有> 1,000,000條記錄的表中使用此功能。結果在<100ms內返回(當然取決於搜索條件)。當然,性能將成爲服務器負載的一個函數,也是您特定的使用場景。 – 2010-03-16 01:05:43

+1

我想你有足夠數量的RAM,以便表格被完全緩存。我只是試着用一個簡單的表'人(電子郵件,名字,姓氏)'包含3.000.000記錄,但分頁到最後記錄需要6秒以上的查詢。我正在使用sql server 2008 r2。我錯過了什麼。 – broadband 2013-12-27 11:34:22