亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

sqlserver 通用存儲過程分頁代碼(附使用ROW_NUMBER()和不使用ROW_NUMBER()兩種情況性能分析)

2024-08-31 01:01:15
字體:
來源:轉載
供稿:網友
表結構:

復制代碼 代碼如下:


CREATE TABLE [dbo].[Xtest](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[XName] [nvarchar](50) NULL,
[XDemo] [nvarchar](500) NULL,
CONSTRAINT [PK_xtest] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


插入50萬條數據:

復制代碼 代碼如下:


declare @i int
set @i=1
while(@i<500001)
begin
insert into dbo.Xtest(XName,XDemo) values(CAST(@i as varchar)+'name'+CAST(@i as varchar),'這是第'+CAST(@i as varchar)+'的內容')
set @i=@i+1
end


另外對XName建立索引。
存儲過程如下:

復制代碼 代碼如下:


-- =============================================
-- Author: <jiangrod>
-- Create date: <2010-03-03>
-- Description: <SQL2000通用分頁存儲過程>調用方法: sp_Pager2000 'xtest','*','ID','ORDER BY ID ASC','xname like ''%222name%''',3,20,0,0
-- =============================================
ALTER PROCEDURE [dbo].[sp_Pager2000]
@tblName varchar(255), -- 表名如:'xtest'
@strGetFields varchar(1000) = '*', -- 需要返回的列如:'xname,xdemo'
@pkName nvarchar(50)='ID', -- 主鍵名
@strOrder varchar(255)='', -- 排序的字段名如:'order by id desc'
@strWhere varchar(1500) = '', -- 查詢條件(注意:不要加where)如:'xname like ''%222name%'''
@pageIndex int = 1, -- 頁碼如:2
@pageSize int = 20, -- 每頁記錄數如:20
@recordCount int=0 out, -- 記錄總數
@doCount bit=0 -- 非0則統計,為0則不統計(統計會影響效率)
AS
Declare @sql nvarchar(4000)
Declare @sqltemp nvarchar(1000)
set @sql=' From '+@tblName
if(@strWhere!='') set @sql=@sql+' Where '+@strWhere
declare @strCount nvarchar(1000)
--總記錄條數
if(@doCount!=0)
begin
if(@strWhere !='')
begin
set @strCount='set @num=(select count(1) from '+ @tblName + ' where '+@strWhere+' )'
end
else
begin
set @strCount='set @num=(select count(1) from '+ @tblName + ' )'
end
EXECUTE sp_executesql @strCount ,N'@num INT output',@RecordCount output
end
if @strWhere !=''
begin
set @strWhere=' where '+@strWhere
end
if (@PageIndex>1)
begin
set @sqltemp=@PKName+' not in (Select Top '+cast((@PageSize*(@PageIndex-1)) as nvarchar)+' '+@PKName+' '+@sql
if(@strOrder!='')set @sqltemp=@sqltemp+' '+@strOrder
set @sqltemp=@sqltemp+')'
set @sql='Select Top '+cast(@PageSize as nvarchar)+' '+@strGetFields+' '+@sql
if(@strWhere!='')set @sql=@sql+' And '+@sqltemp
else set @sql=@sql+' Where '+@sqltemp
end
else
begin
set @sql='Select Top '+cast(@PageSize as nvarchar)+' '+@strGetFields+' '+@sql
end
if(@strOrder!='') set @sql=@sql+' '+@strOrder
exec(@sql)

-- =============================================
-- Author: <jiangrod>
-- Create date: <2010-03-03>
-- Description: <SQL2005及后續版本通用分頁存儲過程>調用方法: sp_Pager2005 'xtest','*','ORDER BY ID ASC','xname like ''%222name%''',2,20,0,0
-- =============================================
ALTER PROCEDURE [dbo].[sp_Pager2005]
@tblName varchar(255), -- 表名如:'xtest'
@strGetFields varchar(1000) = '*', -- 需要返回的列如:'xname,xdemo'
@strOrder varchar(255)='', -- 排序的字段名如:'order by id desc'
@strWhere varchar(1500) = '', -- 查詢條件(注意:不要加where)如:'xname like ''%222name%'''
@pageIndex int = 1, -- 頁碼如:2
@pageSize int = 20, -- 每頁記錄數如:20
@recordCount int output, -- 記錄總數
@doCount bit=0 -- 非0則統計,為0則不統計(統計會影響效率)
AS
declare @strSQL varchar(5000)
declare @strCount nvarchar(1000)
--總記錄條數
if(@doCount!=0)
begin
if(@strWhere !='')
begin
set @strCount='set @num=(select count(1) from '+ @tblName + ' where '+@strWhere+' )'
end
else
begin
set @strCount='set @num=(select count(1) from '+ @tblName + ' )'
end
EXECUTE sp_executesql @strCount ,N'@num INT output',@RecordCount output
end
if @strWhere !=''
begin
set @strWhere=' where '+@strWhere
end
set @strSQL='SELECT * FROM (SELECT ROW_NUMBER() OVER ('+@strOrder+') AS ROWID,'
set @strSQL=@strSQL+@strGetFields+' FROM ['+@tblName+'] '+@strWhere
set @strSQL=@strSQL+') AS sp WHERE ROWID BETWEEN '+str((@PageIndex-1)*@PageSize+1)
set @strSQL=@strSQL+' AND '+str(@PageIndex*@PageSize)
exec (@strSQL)


對上面兩個存儲過程進行了測試,測試環境:酷睿2雙核2.20Gh,1G內存,SQL SERVER2008
對50萬條數據進行了分頁查詢測試
查詢的條件是:xname like '%222name%'
"page1:2秒937毫秒":表示打開第一頁使用的時間,其他依次類推
不使用ROW_NUMBER()每頁都要統計:
page1:2秒937毫秒
page2:3秒140毫秒
page3:3秒453毫秒
page4:3秒609毫秒
page5:3秒843毫秒
page6:4秒156毫秒
不使用ROW_NUMBER()僅第一頁統計:
page1:2秒937毫秒
page2:0秒343毫秒
page3:0秒593毫秒
page4:0秒812毫秒
page5:1秒46毫秒
page6:1秒281毫秒
使用ROW_NUMBER()每頁都要統計:
page1:2秒937毫秒
page2:3秒31毫秒
page3:3秒156毫秒
page4:3秒296毫秒
page5:3秒421毫秒
page6:3秒515毫秒
使用ROW_NUMBER()僅第一頁統計:
page1:2秒937毫秒
page2:0秒218毫秒
page3:0秒359毫秒
page4:0秒468毫秒
page5:0秒578毫秒
page6:0秒687毫秒
結論:在存儲過程當中如果每次都統計記錄總數將會嚴重影響效率,相同的查詢條件記錄總數必定是相同的,所以如果第一頁執行之后把記錄總數保存起來,點擊其他頁次的時候命令存儲過
程不再統計記錄總數將會大大提高系統性能。通過測試結果看出每次都要統計總記錄數使用ROW_NUMBER()和不使用ROW_NUMBER()差別不是太大,如果僅第一次統計總記錄數使用ROW_NUMBER()將
會比不使用ROW_NUMBER()的效率提高很多。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲jizzjizz日本少妇| 日韩在线视频观看| 欧美在线视频一区| 亚洲精品日韩激情在线电影| 国产精品∨欧美精品v日韩精品| 久久亚洲春色中文字幕| 国产一区二区三区久久精品| 91牛牛免费视频| 91精品久久久久久久久久入口| 久久久人成影片一区二区三区观看| 91欧美精品成人综合在线观看| 在线观看国产精品日韩av| 国产精品99久久久久久www| 日韩av在线播放资源| 性色av香蕉一区二区| 九九精品视频在线| 中文字幕日韩有码| 最近中文字幕mv在线一区二区三区四区| 日本aⅴ大伊香蕉精品视频| 国产午夜精品视频免费不卡69堂| 爱福利视频一区| 深夜福利一区二区| 久久人人爽人人爽人人片av高请| 国产精品久久久久久久久久东京| 色偷偷9999www| 91精品国产高清久久久久久91| 国产福利成人在线| 亚洲精品日韩丝袜精品| 45www国产精品网站| 欧美国产欧美亚洲国产日韩mv天天看完整| 丁香五六月婷婷久久激情| 午夜免费日韩视频| 国产精品久久久久久久久久久久久久| 久久久久久国产精品| 久久久精品一区二区三区| 日韩成人在线播放| 亚洲国产精品久久精品怡红院| 久久免费成人精品视频| 国产成人精品国内自产拍免费看| 亚洲欧美一区二区三区在线| 日韩精品极品视频| 性欧美xxxx视频在线观看| 亚洲欧美国产精品久久久久久久| 国产精品第一区| 日韩影视在线观看| 日韩精品在线观看视频| 亚洲a在线观看| 国产精品电影网| 狠狠躁18三区二区一区| 91国产在线精品| 国产va免费精品高清在线| 亚洲欧美日韩精品久久亚洲区| 国产视频久久久久| 久久九九全国免费精品观看| 国产一区二区三区18| 国产成人黄色av| 国产激情久久久久| 国内精品视频一区| 国产97在线视频| 精品亚洲夜色av98在线观看| 久久精品国产亚洲7777| 国产精品久久一区主播| 日韩视频在线免费观看| 欧美日韩色婷婷| 精品国内亚洲在观看18黄| 亚洲高清不卡av| 色天天综合狠狠色| 亚洲老司机av| 亚洲黄色在线看| 国产精品丝袜久久久久久高清| 欧美日韩国产精品一区二区三区四区| 久久久免费精品| 亚洲精品日产aⅴ| 日韩欧美在线视频| 日本精品性网站在线观看| 国产日韩在线精品av| 亚洲午夜久久久久久久| 国产一区二中文字幕在线看| 中文字幕日韩精品在线| 亚洲天堂av综合网| 日韩在线视频网| 欧美午夜片在线免费观看| 亚洲一级黄色片| 国模叶桐国产精品一区| 久久久久久尹人网香蕉| 色yeye香蕉凹凸一区二区av| 欧美日韩高清区| 国产热re99久久6国产精品| 亚洲最新中文字幕| 97在线免费视频| 欧洲中文字幕国产精品| 这里精品视频免费| 69**夜色精品国产69乱| 欧美视频在线视频| 最近的2019中文字幕免费一页| 国产精品久久久久久久美男| 国产精品亚洲视频在线观看| 国产精品第一页在线| 欧美性在线视频| 国产丝袜一区二区三区| 国产精品a久久久久久| 欧美视频13p| 日韩电影视频免费| 亚洲精品欧美极品| 成人免费淫片aa视频免费| 国产午夜精品美女视频明星a级| 国产精品伦子伦免费视频| 国产一区二区三区在线免费观看| 51精品在线观看| 日韩免费在线视频| 欧美成人免费观看| 国产欧美一区二区三区四区| 亚洲综合自拍一区| 青青草原一区二区| 91色p视频在线| 中文字幕不卡av| 中文字幕日韩免费视频| 精品久久久久久国产| 亚洲成人网在线观看| 国产91久久婷婷一区二区| 日本91av在线播放| 国产亚洲美女久久| 国产精品无av码在线观看| 欧美日韩国产精品一区二区不卡中文| 国内外成人免费激情在线视频网站| 97久久久久久| 红桃视频成人在线观看| 揄拍成人国产精品视频| 欧美电影院免费观看| 清纯唯美日韩制服另类| 成人激情视频在线播放| 日韩亚洲精品电影| 国产精品久久久久久久app| 亚洲大尺度美女在线| 国产精品视频自在线| 在线观看久久久久久| 久久久久久国产免费| 国产日韩精品在线播放| 国产精品高精视频免费| 日本精品性网站在线观看| 在线成人激情视频| 亚洲精选一区二区| 亚洲美女久久久| 国产精品久久久久久久7电影| 日韩精品极品在线观看| 亚洲国产一区自拍| 欧美国产日产韩国视频| 一本色道久久综合狠狠躁篇怎么玩| 精品视频在线播放免| 97在线视频观看| 亚洲综合最新在线| 亚洲第一区第一页| 欧美高清无遮挡| 欧美性视频精品| 中文字幕日韩免费视频| 欧美性色xo影院| 亚洲天堂久久av| 欧美在线观看www| 亚洲九九九在线观看| 日韩av在线网站| 国语自产精品视频在线看抢先版图片| 国产成人福利视频| 久久69精品久久久久久国产越南| 国产精品夜色7777狼人|