海量 千萬級 資料查詢分頁 獲取指定頁 儲存過程

2021-04-08 13:24:06 字數 2488 閱讀 7660

--海量[千萬級]資料查詢獲取指定頁

create    procedure proc_pagination(

@tblname   varchar(255),       -- 表名

@strgetfields varchar(1000) = '*',  -- 需要返回的列

@fldname varchar(255)='',      -- 排序的欄位名

@pagesize   int = 10,          -- 頁尺寸

@pageindex  int = 1,           -- 頁碼

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

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

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

) as

set nocount on

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

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

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

if @docount != 0

begin

if @strwhere !=''

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

else

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

end 

--以上**的意思是如果@docount傳遞過來的不是0,就執行總數統計。以下的所有**都是@docount為0的情況

else

begin

if @ordertype != 0

begin

set @strtmp = '<(select min'

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

--如果@ordertype不是0,就執行降序,這句很重要!

endelse

begin

set @strtmp = '>(select max'

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

endif @pageindex = 1

begin

if @strwhere != ''  

set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ '  from [' + @tblname + '] where ' + @strwhere + ' ' + @strorder

else

set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ '  from ['+ @tblname + '] '+ @strorder

--如果是第一頁就執行以上**,這樣會加快執行速度

endelse

begin

--以下**賦予了@strsql以真正執行的sql**

set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ '  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) +' '+@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)

set nocount off 

MySQL處理千萬級資料查詢 分頁

mysql資料庫優化處理實現千萬級快速分頁分析,來看下吧。資料表 collect id,title info vtype 就這4個欄位,其中 title 用定長,info 用text,id 是逐漸,vtype是tinyint,vtype是索引。這是一個基本的新聞系統的簡單模型。現在往裡面填充資料,填...

MySQL處理千萬級資料查詢 分頁

mysql資料庫優化處理實現千萬級快速分頁分析,來看下吧。資料表 collect id,title info vtype 就這4個欄位,其中 title 用定長,info 用text,id 是逐漸,vtype是tinyint,vtype是索引。這是一個基本的新聞系統的簡單模型。現在往裡面填充資料,填...

MySQL處理千萬級資料查詢 分頁

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!mysql資料庫優化處理實現千萬級快速分頁分析,來看下吧。資料表 collect id,title info vtype 就這4個欄位,其中 title 用定長,info 用text,id 是逐漸,vtype是tinyint,vtype是索引。這是...

mysql千萬級資料查詢

1.mysql的資料查詢,大小欄位要分開,這個還是有必要的,除非一點就是你查詢的都是索引內容而不是表內容,比如只查詢id等等 2.查詢速度和索引有很大關係也就是索引的大小直接影響你的查詢效果,但是查詢條件一定要建立索引,這點上注意的是索引欄位不能太多,太多索引檔案就會很大那樣搜尋只能變慢 3.查詢指...

oracle千萬級資料查詢優化

需求 組合查詢,按條件統計某幾個欄位取前100條記錄 問題 沒建索引導致查詢結果耗時5秒多,不能忍受。解決方法 建索引,在哪個欄位建?在這裡先提下oracle的sql語句的執行。oracle在執行sql語句之前會用優化器optimizer對sql語句進行解析,解析出最優的執行計劃再執行,這樣所花費的...