實現千萬級資料的分頁顯示
/*經測試,在 14483461 條記錄中查詢第 100000 頁,每頁 10 條記錄按公升序和降序第一次時間均為 0.47 秒,第二次時間均為 0.43 秒,測試語法如下:
exec getrecordfrompage news,newsid,10,100000
news 為 表名, newsid 為關鍵字段, 使用時請先對 newsid 建立索引。
*//*
函式名稱: getrecordfrompage
函式功能: 獲取指定頁的資料
引數說明: @tblname 包含資料的表名
@fldname 關鍵欄位名
@pagesize 每頁記錄數
@pageindex 要獲取的頁碼
@ordertype 排序型別, 0 - 公升序, 1 - 降序
@strwhere 查詢條件 (注意: 不要加 where)
作 者:紫色形人
郵 箱: [email protected]
declare @strsql varchar(6000) -- 主語句
declare @strtmp varchar(1000) -- 臨時變數
declare @strorder varchar(500) -- 排序型別
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
endexec (@strsql)
go
實現千萬級資料的分頁顯示
名稱 spall deletenoneunique 輸入 要查詢的表名和字段列表 輸出 呼叫 說明 實現千萬級資料的分頁顯示 可以在5秒內獲取 1448萬條記錄裡的第1200頁的100條記錄,雄不?create procedure getrecordfrompage tblname varchar ...
實現千萬級資料的分頁顯示
名稱 spall deletenoneunique 輸入 要查詢的表名和字段列表 輸出 呼叫 說明 實現千萬級資料的分頁顯示 可以在5秒內獲取 1448萬條記錄裡的第1200頁的100條記錄,雄不?create procedure getrecordfrompage tblname?varchar ...
實現千萬級資料的分頁顯示
create procedure dbo getrecordfrompage tblname varchar 255 表名 fldname varchar 2552 欄位名 pagesize int 10,頁尺寸 pageindex int 1,頁碼 iscount bit 0,返回記錄總數,非 0...