我已經實現了兩種非常快速的方式來分頁大型MS SQL Server數據庫表,其中至少包含1,000,000
記錄,但未能確定專業人員以及任何一種方法的缺點,建議任一將不勝感激:在ASP.Net中分頁數據庫數據的最佳方法
第一個是運行SQL查詢,並返回篩選記錄的主鍵值,指定可能100-1000的TOP子句。然後可以將這些值放入Web服務器上的會話變量中,並通過相應地將主鍵值的子集提供回服務器來進行分頁。
對此的一個積極因素是對用戶最初進行搜索時,記錄的過濾只發生一次,其次,如果需要,可以在整個記錄集中一次一頁地瀏覽記錄,如預覽即將到來的記錄等。此方法還提供了一些有關進一步過濾已過濾記錄的好處,因爲可以通過將主鍵值列表提供給SQL Server來確定可過濾選項 - 例如常見屬性,標題,導向器,
第二個選項是通過SQL Server執行過濾和分頁,提供諸如'每頁記錄'和'頁碼'等變量。
這樣做的好處是,不需要用用戶會話阻塞web服務器,而用戶會話的大小無疑至少會超過1000個字節,從長遠來看,這隻會導致網絡數量網站用戶增加。相比之下,最差的是我列出的第一個選項的積極因素,例如缺乏確定只有單個頁面或主鍵值子集的整個記錄集的過濾選項的能力在Web服務器上工作。
上面給出的每個人的想法是什麼,尤其是關於將結果的主鍵值存儲在會話變量,內存,備選選項等方面?
我同意前提「db通常是瓶頸」。您可以隨時添加更多的Web服務器到一個服務器場來擊中相同的數據庫。 – granadaCoder
或更多RAM到當前Web服務器。 – mtzaldo
數據主要通過使用SqlClient類的基本CRUD函數檢索,以XML格式返回,然後將其反序列化爲強類型對象 - 儘管這僅在使用子/父關係返回複雜對象時纔會完成。 數據檢索的過程是相當不錯的,並從主查詢返回的數據非常快,我最關心的是堵塞了服務器存儲了無數的會話變量,然後以後需要上下行重新實現的。 – Nathan