2013-07-09 112 views
2

我已經實現了兩種非常快速的方式來分頁大型MS SQL Server數據庫表,其中至少包含1,000,000記錄,但未能確定專業人員以及任何一種方法的缺點,建議任一將不勝感激:在ASP.Net中分頁數據庫數據的最佳方法

第一個是運行SQL查詢,並返回篩選記錄的主鍵值,指定可能100-1000的TOP子句。然後可以將這些值放入Web服務器上的會話變量中,並通過相應地將主鍵值的子集提供回服務器來進行分頁。

對此的一個積極因素是對用戶最初進行搜索時,記錄的過濾只發生一次,其次,如果需要,可以在整個記錄集中一次一頁地瀏覽記錄,如預覽即將到來的記錄等。此方法還提供了一些有關進一步過濾已過濾記錄的好處,因爲可以通過將主鍵值列表提供給SQL Server來確定可過濾選項 - 例如常見屬性,標題,導向器,

第二個選項是通過SQL Server執行過濾和分頁,提供諸如'每頁記錄'和'頁碼'等變量。

這樣做的好處是,不需要用用戶會話阻塞web服務器,而用戶會話的大小無疑至少會超過1000個字節,從長遠來看,這隻會導致網絡數量網站用戶增加。相比之下,最差的是我列出的第一個選項的積極因素,例如缺乏確定只有單個頁面或主鍵值子集的整個記錄​​集的過濾選項的能力在Web服務器上工作。

上面給出的每個人的想法是什麼,尤其是關於將結果的主鍵值存儲在會話變量,內存,備選選項等方面?

回答

0

我是那種認爲數據庫時間比網絡服務器時間更有價值的人。但那是我的方法。 就你而言,你如何檢索數據?你使用DataSet/DataTables還是使用強類型容器?爲什麼不在Web服務器端甚至客戶端使用linq或其他過濾技術? (您可以將所有記錄顯示給用戶並使用javascript進行過濾)。

+0

我同意前提「db通常是瓶頸」。您可以隨時添加更多的Web服務器到一個服務器場來擊中相同的數據庫。 – granadaCoder

+0

或更多RAM到當前Web服務器。 – mtzaldo

+0

數據主要通過使用SqlClient類的基本CRUD函數檢索,以XML格式返回,然後將其反序列化爲強類型對象 - 儘管這僅在使用子/父關係返回複雜對象時纔會完成。 數據檢索的過程是相當不錯的,並從主查詢返回的數據非常快,我最關心的是堵塞了服務器存儲了無數的會話變量,然後以後需要上下行重新實現的。 – Nathan

相關問題