sql 存儲過程分頁代碼 支持億萬龐大數(shù)據(jù)量
更新時間:2011年09月21日 22:08:48 作者:
sql 存儲過程分頁代碼 支持億萬龐大數(shù)據(jù)量,需要的朋友可以參考下。
復(fù)制代碼 代碼如下:
CREATE PROCEDURE page
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='id', -- 排序的字段名
@PageSize int = 10, -- 頁尺寸
@PageIndex int = 1, -- 頁碼
@doCount bit = 0, -- 返回記錄總數(shù), 非 0 值則返回
@OrderType bit = 0, -- 設(shè)置排序類型, 非 0 值則降序 0:asc 1:desc
@strWhere varchar(1500) = '', -- 查詢條件 (注意: 不要加 where)
@ID nvarchar(50)='id' --主表的列。。最好是主鍵
AS
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,就執(zhí)行總數(shù)統(tǒng)計。以下的所有代碼都是@doCount為0的情況
else begin
if @OrderType != 0 begin
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @fldName +' desc'
--如果@OrderType不是0,就執(zhí)行降序,這句很重要!
end
else begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @fldName +' asc'
end
if @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
--如果是第一頁就執(zhí)行以上代碼,這樣會加快執(zhí)行速度
end
else begin
--以下代碼賦予了@strSQL以真正執(zhí)行的SQL代碼
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '
+ @tblName + ' where ' + @fldName + ' ' + @strTmp + '( '+ @ID + ' ) 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 + '('
+ @ID + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '
+ @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
exec (@strSQL)
您可能感興趣的文章:
- 大數(shù)據(jù)量時提高分頁的效率
- 數(shù)據(jù)庫高并發(fā)情況下重復(fù)值寫入的避免 字段組合約束
- 大數(shù)據(jù)量分頁存儲過程效率測試附測試代碼與結(jié)果
- 大數(shù)據(jù)量,海量數(shù)據(jù)處理方法總結(jié)
- MySQL數(shù)據(jù)庫優(yōu)化經(jīng)驗詳談(服務(wù)器普通配置)
- MySQL數(shù)據(jù)庫十大優(yōu)化技巧
- SQL Server數(shù)據(jù)庫的高性能優(yōu)化經(jīng)驗總結(jié)
- 數(shù)據(jù)庫性能優(yōu)化三:程序操作優(yōu)化提升性能
- 數(shù)據(jù)庫性能優(yōu)化二:數(shù)據(jù)庫表優(yōu)化提升性能
- 數(shù)據(jù)庫性能優(yōu)化一:數(shù)據(jù)庫自身優(yōu)化提升性能
- Oracle 數(shù)據(jù)庫優(yōu)化實戰(zhàn)心得總結(jié)
- 優(yōu)化mysql數(shù)據(jù)庫的經(jīng)驗總結(jié)
- mysql數(shù)據(jù)庫優(yōu)化總結(jié)(心得)
- 關(guān)于數(shù)據(jù)庫優(yōu)化問題收集匯總
- oracle數(shù)據(jù)庫sql的優(yōu)化總結(jié)
- sql 百萬級數(shù)據(jù)庫優(yōu)化方案分享
- 優(yōu)化Mysql數(shù)據(jù)庫的8個方法
- mysql數(shù)據(jù)庫sql優(yōu)化原則(經(jīng)驗總結(jié))
- 針對Sqlserver大數(shù)據(jù)量插入速度慢或丟失數(shù)據(jù)的解決方法
- MySQL數(shù)據(jù)庫優(yōu)化詳解
- MySQL中實現(xiàn)高性能高并發(fā)計數(shù)器方案(例如文章點擊數(shù))
- 超大數(shù)據(jù)量存儲常用數(shù)據(jù)庫分表分庫算法總結(jié)
- sqlserver數(shù)據(jù)庫優(yōu)化解析(圖文剖析)
- 詳解MySQL性能優(yōu)化(一)
- 詳解MySQL性能優(yōu)化(二)
- 19個MySQL性能優(yōu)化要點解析
- 大數(shù)據(jù)量高并發(fā)的數(shù)據(jù)庫優(yōu)化詳解
相關(guān)文章
MSSQL存儲過程學(xué)習(xí)筆記一 關(guān)于存儲過程
在寫筆記之前,首先需要整理好這些概念性的東西,否則的話,就會在概念上產(chǎn)生陌生或者是混淆的感覺。2011-05-05SQL中字段自增(IDENTITY,序列Sequence)的兩種方法
本文主要介紹了SQL中字段自增,主要包括IDENTITY,序列Sequence的兩種方法,具有一定的參考價值,感興趣的可以了解一下2023-11-11數(shù)據(jù)庫日常練習(xí)題,每天進(jìn)步一點點(1)
下面小編就為大家?guī)硪黄獢?shù)據(jù)庫基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07SQL學(xué)習(xí)筆記三 select語句的各種形式小結(jié)
SQL學(xué)習(xí)筆記三 select語句的各種形式小結(jié),大家可以查看下select命名的使用。2011-08-08Sql學(xué)習(xí)第四天——SQL 關(guān)于with cube,with rollup和grouping解釋及演示
CUBE 生成的結(jié)果集顯示了所選列中值的所有組合的聚合。ROLLUP 生成的結(jié)果集顯示了所選列中值的某一層次結(jié)構(gòu)的聚合,接下再看看對grouping的解釋,感興趣的朋友可以參考下哈2013-03-03T-sql語句修改SQL Server數(shù)據(jù)庫邏輯名、數(shù)據(jù)庫名、物理名的方法
這篇文章主要介紹了T-sql語句修改SQL Server數(shù)據(jù)庫邏輯名、數(shù)據(jù)庫名、物理名的方法,結(jié)合實例形式分析了T-SQL語句操作數(shù)據(jù)庫的基本技巧,非常簡單易懂,需要的朋友可以參考下2016-06-06