SQL Server 索引結構及其使用(三)

2021-04-23 04:13:14 字數 1252 閱讀 2610

建立乙個 web 應用,分頁瀏覽功能必不可少。這個問題是資料庫處理中十分常見的問題。經典的資料分頁方法是:ado 紀錄集分頁法,也就是利用ado自帶的分頁功能(利用游標)來實現分頁。但這種分頁方法僅適用於較小資料量的情形,因為游標本身有缺點:游標是存放在記憶體中,很費記憶體。游標一建立,就將相關的記錄鎖住,直到取消游標。游標提供了對特定集合中逐行掃瞄的手段,一般使用游標來逐行遍歷資料,根據取出資料條件的不同進行不同的操作。而對於多表和大表中定義的游標(大的資料集合)迴圈很容易使程式進入乙個漫長的等待甚至宕機。

更重要的是,對於非常大的資料模型而言,分頁檢索時,如果按照傳統的每次都載入整個資料來源的方法是非常浪費資源的。現在流行的分頁方法一般是檢索頁面大小的塊區的資料,而非檢索所有的資料,然後單步執行當前行。

最早較好地實現這種根據頁面大小和頁碼來提取資料的方法大概就是「俄羅斯儲存過程」。這個儲存過程用了游標,由於游標的侷限性,所以這個方法並沒有得到大家的普遍認可。

後來,網上有人改造了此儲存過程,下面的儲存過程就是結合我們的辦公自動化例項寫的分頁儲存過程:

create procedure pagination1

(@pagesize int, --頁面大小,如每頁儲存20條記錄

@pageindex int --當前頁碼)as

set nocount _disibledevent= "select top " + str(@pagesize) +" "+@strgetfields+ " from ["

+ @tblname + "] where [" + @fldname + "]" + @strtmp + "(["

+ @fldname + "]) from (select top " + str((@pageindex-1)*@pagesize) + " ["

+ @fldname + "] from [" + @tblname + "] where " + @strwhere + " "

+ @strorder + ") as tbltmp) and " + @strwhere + " " + @strorder

end

end

exec (@strsql)

go

上面的這個儲存過程是乙個通用的儲存過程,其注釋已寫在其中了。 在大資料量的情況下,特別是在查詢最後幾頁的時候,查詢時間一般不會超過9秒;而用其他儲存過程,在實踐中就會導致超時,所以這個儲存過程非常適用於大容量資料庫的查詢。 筆者希望能夠通過對以上儲存過程的解析,能給大家帶來一定的啟示,並給工作帶來一定的效率提公升,同時希望同行提出更優秀的實時資料分頁演算法。

SQL Server 索引結構及其使用(四)

聚集索引的重要性和如何選擇聚集索引 在 上一節的標題中,筆者寫的是 實現小資料量和海量資料的通用分頁顯示儲存過程。這是因為在將本儲存過程應用於 辦公自動化 系統的實踐中時,筆者發現這第三種儲存過程在小資料量的情況下,有如下現象 1 分頁速度一般維持在1秒和3秒之間。2 在查詢最後一頁時,速度一般為5...

SQL Server 索引結構及其使用(四)

在上一節的標題中,筆者寫的是 實現小 資料量 辦公自動化 系統的實踐中時,筆者發現這第三種儲存過程在小資料量的情況下,有如下現象 1 分頁速度一般維持在1秒和 3秒之間。2 在 查詢5秒至8 秒,哪怕分頁總數只有3頁或 30萬頁。雖然在超大容量情況下,這個分頁的實現過程是很快的,但在分前幾頁時,這個...

SQL Server 索引結構及其使用(四)

聚集索引的重要性和如何選擇聚集索引 在上一節的標題中,筆者寫的是 實現小資料量和海量資料的通用分頁顯示儲存過程。這是因為在將本儲存過程應用於 辦公自動化 系統的實踐中時,筆者發現這第三種儲存過程在小資料量的情況下,有如下現象 1 分頁速度一般維持在1秒和3秒之間。2 在查詢最後一頁時,速度一般為5秒...