Dot-Net

從數據庫中獲取大約一百萬條記錄的最佳方法是什麼?

  • March 3, 2017

我需要在網頁上獲取和顯示數據,其記錄數可能會根據過濾器從大約 500 條記錄到 100 萬條記錄而有所不同。

記憶體在這裡有用嗎,因為我認為記憶體中的百萬記錄不是一個好主意。SqldataReader?

當然,分頁是必須實現的。顯示 100 萬條記錄是最壞的情況(All filter案例中的愚蠢!)。

我應該使用連接架構(SqlDataReader)還是斷開架構(DataSets)?

首先,這樣想:顯示 100 萬條記錄對任何使用者都毫無意義。因此,您必須考慮使用者期望看到的內容。或許是總結?!也許在 25、50 或 100 條記錄的頁面中對記錄進行分頁。這些方法中的任何一種都不需要您在記憶體中一次保存 1 M 條記錄。

此外,當您對 SQL 數據庫執行查詢並使用 SqlDataReader 時,您不會收到所有記錄,而是 SQL 驅動程序會將查詢發送到 SQL 伺服器,伺服器將執行查詢,準備結果集並創建伺服器上的只進游標。然後驅動程序將在每次呼叫 SqlDataReader 上的 Read() 時一次獲取一條記錄。如果您使用使用延遲執行的 LINQ to SQL,則行為非常相似。直到(或除非)您特別請求每一行,結果集才會全部傳輸。

因此,一個簡單的分頁查詢就可以解決問題。或者在其他情況下,某種匯總報告將這 100 萬條記錄中的數據匯總到一兩頁相關數據中。

當然,如果您確實需要在頁面之間來回移動,那麼某種記憶體可能是有意義的,但請再次考慮一下:使用者實際想要瀏覽 100 萬條記錄的頻率 - 可能永遠不會。

最後一點,如果您確實實現了分頁 - 請確保您用於實現分頁的方法依賴於 SQL 伺服器一次發送一頁數據,而不是將所有 100 萬條記錄讀入 ASP.NET,然後在本地分頁複製數據,因為那將是非常低效和緩慢的。這是執行分頁的 SQL Server 查詢範例:SO Question #109232

引用自:https://stackoverflow.com/questions/3949966