c 有關分頁問題的分析

2021-04-01 17:59:30 字數 2442 閱讀 2230

大體看了一下,思路無非是兩種:一種是通過資料庫端建立儲存過程的方式,一種是在程式段讀取指定的資料集。簡單的說,要麼在資料庫端實現,要麼在程式端實現。

在程式端會占用較大的記憶體空間,如果涉及到remote的問題就麻煩了,如果處理的資料少還好說,多的話還是用資料庫端的要好些。所以看到很多解決方式都在向儲存過程的方向上靠。最終的處理呢,就是看誰的儲存過程更能優化,效率更高了。下面給出幾個例子參考一下:

例一、-- 獲取指定頁的資料

create procedure getrecordfrompage

@tblname      varchar(255),       -- 表名

@fldname      varchar(255),       -- 欄位名

@pagesize     int = 10,           -- 頁尺寸

@pageindex    int = 1,            -- 頁碼

@iscount      bit = 0,            -- 返回記錄總數, 非 0 值則返回

@ordertype    bit = 0,            -- 設定排序型別, 非 0 值則降序

@strwhere     varchar(1000) = ''  -- 查詢條件 (注意: 不要加 where)

asas

declare @strsql   varchar(6000)       -- 主語句

declare @strtmp   varchar(100)        -- 臨時變數

declare @strorder varchar(400)        -- 排序型別

if @ordertype != 0

begin

set @strtmp = "<(select min"

set @strorder = " order by [" + @fldname +"] desc"

endelse

begin

set @strtmp = ">(select max"

set @strorder = " order by [" + @fldname +"] asc"

endset @strsql = "select top " + str(@pagesize) + " * from ["

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

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

+ @fldname + "] from [" + @tblname + "]" + @strorder + ") as tbltmp)"

+ @strorder

if @strwhere != ''

set @strsql = "select top " + str(@pagesize) + " * from ["

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

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

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

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

if @pageindex = 1

begin

set @strtmp = ""

if @strwhere != ''

set @strtmp = " where " + @strwhere

set @strsql = "select top " + str(@pagesize) + " * from ["

+ @tblname + "]" + @strtmp + " " + @strorder

endif @iscount != 0

set @strsql = "select count(*) as total from [" + @tblname + "]"

exec (@strsql)

go原文據說是實現上千萬條資料的分頁顯示,可見效率應該不一般了。

例二、(略)

網上很多例子是web下的,無論是asp還是jsp要麼使用現成的元件,要麼自己來寫分頁的**,內容沒細看,大體上都是把資料從庫中讀出來,在記憶體中分頁,放到脫離資料庫中的集合中去,這樣做資料庫端應該沒什麼壓力,但是資料量一大,就難報會出什麼問題了。因為想做的分頁不見得會用到web上,所以不對這種方式做更深入的研究了。最好是能做乙個通用的元件,在b/s、c/s下就都可以執行了。

仔細想想主要要解決的還是在sqlserver端。

先寫到這裡,待續

虛函式有關問題分析

include includeusing namespace std class foo virtual void func11 void func2 virtual void func3 int data1 static int data2 int foo data2 1 class afoo p...

有關ElasticSearch分頁的坑!

最近公司新的 專案需要用到elasticsearch搜尋引擎。然後我是負責的商品模組中,然後我就開始了解elasticsearch。公司的要求是需要搜尋出來後,商品要按照 1,綜合排序 2,公升序 3,降序 4,銷量排序 然後,在了解elasticsearch中的dsl語法後寫完es的介面。然後自己...

C 與指標有關的問題

c 是一門功能強大的語言。它既相容了 c中的最重要的內容 指標,又有物件導向的功能,如使用繼承組合以及虛函式實現多型等等。如果使用者對這些內容了解不夠深入具體。則常常在使用 c 的指標時會出現不少問題。現舉一些例子如下。其中全部例子來自書本或者網上 問題 如下 上面的 編譯都能通過,但是執行的結果卻...