用於大於1,000,000行並且可能還有更多數目的表!在sql 2008中使用大型表進行高效分頁
還沒有做任何基準自己所以想得到專家的意見。
看了看ROW_NUMBER()的一些文章,但它似乎會影響性能
什麼其他的選擇/替代方案?
用於大於1,000,000行並且可能還有更多數目的表!在sql 2008中使用大型表進行高效分頁
還沒有做任何基準自己所以想得到專家的意見。
看了看ROW_NUMBER()的一些文章,但它似乎會影響性能
什麼其他的選擇/替代方案?
我們使用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行的表。
我的理解是性能是服務器負載和服務器資源等的一個函數,請參閱上述備註中的兩個鏈接pov – Kumar 2010-03-16 00:55:04
正如我所說的,我們實際在具有> 1,000,000條記錄的表中使用此功能。結果在<100ms內返回(當然取決於搜索條件)。當然,性能將成爲服務器負載的一個函數,也是您特定的使用場景。 – 2010-03-16 01:05:43
我想你有足夠數量的RAM,以便表格被完全緩存。我只是試着用一個簡單的表'人(電子郵件,名字,姓氏)'包含3.000.000記錄,但分頁到最後記錄需要6秒以上的查詢。我正在使用sql server 2008 r2。我錯過了什麼。 – broadband 2013-12-27 11:34:22
你介意共享顯示row_number()不執行的文章... – 2010-03-15 04:13:58
除了最瑣碎的查詢之外,所有的查詢都需要索引和最新的統計信息才能正常運行。 – 2010-03-15 04:22:17
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