2009-11-28 178 views
3

我有一個數據庫表大約。 100,000條目。如何在分頁結果視圖中獲取總計結果數量?

我的網絡應用程序將顯示paged搜索查詢的結果,可能會產生0到100,000條記錄。

當生成我想要做的兩件事情輸出:

  • 展會總NR結果
  • 顯示分頁查看,每頁50-100結果。

很顯然,我想從DB中一次只查詢一個頁面的記錄,但這裏是一個兩難的問題 - 如何在不運行整個查詢的情況下獲取COUNT()?

如果我必須運行整個查詢,是不是更好地選擇它並緩存在內存中?

如果我們處於每個結果集100 krecords的範圍內,通常會在這種情況下做什麼?

基本上, 什麼是最有效的方式能夠顯示「找到xxxxx結果」消息和結果拆分成頁面?

回答

1

您可以先運行單獨的查詢來獲取計數,而無需檢索所有其他表列。

根據計數值,您可以決定您的檢索/分頁策略。

相當數量的尋呼相關posts in SO here

1

顯示頁面總數很昂貴。數據庫必須完成查詢直到最後一行。它必須從磁盤讀取它們,執行連接,評估子句和列計算的位置。

所以它很貴,但它值得嗎?事實證明,總頁數是沒有人使用的功能。所以,不要在這方面花費大量時間跟蹤。這不值得。

不顯示總頁數。

+0

我一直在找我自己今天。 – 2010-04-07 17:09:57

0

這就是我之前取得的成就。性能遠非如此,但在特定環境下使用它並不重要(甚至在最壞情況下少於70k行,大多數查詢將內部派生表過濾到非問題點。)

我會迴應「這是否值得嗎?」情緒表達在其他答案。

DECLARE @StartRow INT 
DECLARE @EndRow INT 
SET @StartRow = 10; 
SET @EndRow = 30; 

SELECT M.[RowID], M.[UPRN], M.[Address_1], M.RowID+RowID2 as [TotalRows] 
FROM 
(
SELECT ROW_NUMBER() OVER (ORDER BY A1.UPRN ASC) as RowID, 
     ROW_NUMBER() OVER (ORDER BY A1.UPRN DESC) as RowID2, 
     A1.UPRN, 
     A1.Add_1 
      FROM Core.Addresses A1 
    ) as M 
    WHERE M.RowID BETWEEN @StartRow and @EndRow