--海量[千萬級]資料查詢獲取指定頁
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語句進行解析,解析出最優的執行計劃再執行,這樣所花費的...