程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET 2.0數據教程之二十五:大數據量時提高分頁的效率

ASP.NET 2.0數據教程之二十五:大數據量時提高分頁的效率

編輯:關於ASP.NET

返回“ASP.NET 2.0數據教程目錄”

如我們在之前的教程裡討論的那樣,分頁可以通過兩種方法來實現:

默 認分頁– 你僅僅只用選中data Web control的智能標簽的Enable Paging ; 然而,當你浏覽頁面的時候,雖然你看到的只是一小部分數據,ObjectDataSource 還是會每次都讀取所有數據

自定義分頁– 通過只從數據庫讀取用戶 需要浏覽的那部分數據,提高了性能.顯然這種方法需要你做更多的工作.

默認的分頁功能非常吸引人,因為你只需要選中一個checkbox就可以完成了.但是 它每次都讀取所有的數據,這種方式在大數據量或者並發用戶多的情況下就不合適 .在這樣的情況下,我們必須通過自定義分頁來使系統達到更好的性能.

自 定義分頁的一個重點是要寫一個返回僅僅需要的數據的查詢語句.幸運 的,Microsoft SQL Server 2005 提供了一個新的keyword,通過它我們可以寫出讀 取需要的數據的查詢.在本教程裡,我們將學習在GridView裡如何使用Microsoft SQL Server 2005 的這個新的keyword來實現自定義分頁.自定義分頁和默認分頁 的界面看起來一樣,但是當你從一頁轉到另一頁時,在效率上差了幾個數量 級.

注意:自定義分頁帶來的性能提升程序取決於數據的總量和數據庫的負 載.在本教程的最後我們會用數據來說明自定義分頁帶來的性能方面的好 處.

第一步: 理解自定義分頁的過程給數據分頁的時候,頁面顯示的數據取 決於請求的是哪一頁和每頁顯示多少條.比如,想象以下我們給81個product分頁, 每頁顯示10條.當我們浏覽第一頁時,我們需要的是product 1 到 product 10.當 浏覽第二頁時,我們需要的是product 11 到 product 20,以次類推.

對於 需要讀取什麼數據和分頁的頁面怎麼顯示,有三個相關的變量:

Start Row Index – 頁面裡顯示數據的第一行的索引; 這個值可以通過頁的索引乘每 頁顯示的記錄的條數加1得到. 例如, 如果一頁顯示10條數據, 那麼對第一頁來說 (第一頁的索引為0), 第一行的索引為0 * 10 + 1, or 1; 對第二頁來說(索引為 1), 第一行的索引為1 * 10 + 1,即 11.

Maximum Rows – 每頁顯示 的最多記錄的條數. 之所以稱為“maximum” rows 是由於最後一頁顯 示的數據可能會比page size要小. 比如, 當以每頁10條記錄來顯示81條時, 最後 一頁也就是第九頁只包含一條記錄. 沒有頁面顯示的記錄條數會大於Maximum Rows 的值.

Total Record Count – 顯示數據的總條數. 不需要知 道頁面顯示什麼數據,但是記錄總數會影響到分頁. 比如, 如果對81條product記 錄分頁,每頁10條,那麼總頁數為9.

對默認分頁來說,Start Row Index是由 頁索引和每頁的記錄數加1得到,Maximum Rows 就是每頁的記錄數.使用默認分頁 時,不管是呈現哪頁的數據,都是要讀取全部的數據,所有每行的索引都是已知的, 這樣獲取Start Row Index變的沒有價值.而且,記錄的總條數是可以通過 DataTable的總條數來獲取的.

自定義分頁只返回從Start Row Index 開始 的Maximum Rows條記錄.在這裡有兩個要注意的地方:

我們必須把整個要分 頁的數據和一個row index關聯起來,這樣才能從指定的Start Row Index 開始返 回需要的數據.

我們需要提供用來分頁的數據的總條數.

在後面的 兩步裡我們將寫出和上面兩點相關的SQL.除此之外,我們還將在DAL和BLL裡完成 相應的方法.

第二步: 返回需要分頁的記錄的總條數在我們學習如何返回 顯示頁面需要的數據之前,我們先來看看怎麼獲取數據的總條數.因為在配置界面 的時候需要用到這個信息.我們使用SQL的COUNT aggregate function來實現這個. 比如,返回Products表的總記錄條數,我們可以用如下的語句:

SQL 1

2

SELECT COUNT(*) FROM Products

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved