sqlserver2005 的分页测试 附上 分页存储过程
2009-08-21 15:05
344 查看
直接贴测试的sql脚本
下面 附上 可用 的 ms sql 的查询分页存储过程:
注:(OrderField 必须唯一,如果为主键速度很快)
--数据表Table10001数据量60万 -- 结论1:在1000页以内翻页两种方法没有区别 -- 两个top分页方法是在 (1w)1500毫秒,最后一页(3140毫秒)select drid,title ,year -- ROW_NUMBER分页方法在(1w)1000毫秒 ,最后一页(1576毫秒)select drid,title ,year --结论2:还发现一个问题,如果多一个选择列的话,速度差别更大,*标识 30个字段 -- 两个top分页方法是在(1w)43056毫秒,最后一页(93436毫秒)select drid,title ,year -- ROW_NUMBER分页方法在(1w)27560毫秒 ,最后一页(41210毫秒)select drid,title ,year -------------//测试分页总结--------------------------------------- declare @page int set @page=33203; --当前页 declare @pagecount int --页总数33203 declare @totleCount int set @totleCount=664053--记录总数 declare @perpage int set @perpage=20;--每页 set @pagecount=@totleCount/@perpage+1 ; select @pagecount declare @d datetime --测试时间 ----------利用两个top分页------------------------------- set @d=getdate() declare @nTcount int set @nTcount = @perpage + @perpage * (@page - 1); select top (@perpage) drid,title ,year from (select top (@nTcount) drid,title,year from Table10001 order by year desc,drid desc) as tbb order by year asc,drid asc select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate()) --------利用ROW_NUMBER分页--------------------------------- set @d=getdate() declare @s int set @s=(@page-1)*@perpage declare @e int set @e=(@page)*(@perpage) ; With Cust AS ( SELECT drid, title,year, ROW_NUMBER() OVER (order by [year] desc,drid desc ) as RowNumber FROM Table10001 ) select * from Cust Where RowNumber Between @s and @e-1 select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())
下面 附上 可用 的 ms sql 的查询分页存储过程:
注:(OrderField 必须唯一,如果为主键速度很快)
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go CREATE procedure [dbo].[SqlDataSearchListPaging] @tbName varchar(255), --表名 @tbFields varchar(1000), --返回字段 @OrderField varchar(255), --排序的字段名 @PageSize int, --页尺寸 @PageIndex int, --页码 @OrderType bit, --排序类型,1是升序,0是降序 @strWhere varchar(1500) --查询条件 --@Total int output , --返回总记录数 as declare @strSql varchar(5000) --主语句 declare @strOrder varchar(200) --排序 declare @strSqlCount nvarchar(500)--查询记录总数主语句 declare @strtemp varchar(50) --排序附加语句 --------------排序-----------------0是降序,1未升序 --set @Total=0 if @OrderType !=0 begin set @strtemp= '>(select max(' set @strOrder='order by ' + @OrderField + ' asc ' end else begin set @strtemp= '<(select min(' set @strOrder='order by '+ @OrderField + ' desc' end --------------总记录数--------------- --if @strWhere !='' -- begin -- set @strSqlCount='Select @TotalCout=count(*) from ' + @tbName + 'where '+ @strWhere -- end --else -- begin -- set @strSqlCount='Select @TotalCout=count(*) from ' + @tbName -- end --------------分页为第一页------------ if @PageIndex =1 or @PageIndex <=0 begin set @PageIndex =1 if @strWhere !='' begin set @strSql = 'Select top' +str(@PageSize)+ ' ' + @tbFields + ' from '+ @tbName +' where ' + @strWhere + ' ' + @strOrder end else begin set @strSql = 'Select top' +str(@PageSize)+ ' ' + @tbFields + ' from '+ @tbName + ' ' + @strOrder end end else begin if @strWhere !='' begin set @strSql='Select top ' +str(@PageSize) + ' ' + @tbFields +' from ' + @tbName + ' where '+@OrderField +' ' + @strtemp+ ' ' +@OrderField+ ') from (select top' +str((@PageIndex-1)*@PageSize) + ' '+@OrderField +' from '+@tbName+' where ' + @strWhere+ ' '+ @strOrder +') as tb) AND '+ @strWhere+ ' '+ @strOrder end else begin set @strSql='Select top ' + str(@PageSize) + ' ' + @tbFields +' from ' + @tbName + ' where '+@OrderField + ' ' + @strtemp+ ' ' +@OrderField+ ') from (select top' +str((@PageIndex-1)*@PageSize) + ' '+@OrderField +' from '+@tbName + ' '+ @strOrder +') as tb)'+ @strOrder end end --exec sp_executesql @strSqlCount,N'@TotalCout int output',@Total output exec(@strSql)
相关文章推荐
- (转)常见存储过程分页PK赛——简单测试分析常见存储过程分页速度
- MSSQL 存储过程分页 测试 3
- SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)
- 利用SqlServer2005的新增函数实现更高效的分页存储过程
- 专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)
- (转)常见存储过程分页PK赛——简单测试分析常见存储过程分页速度
- 常见存储过程分页PK赛——简单测试分析常见存储过程分页速度
- SqlServer2005中利用存储过程分页
- 专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)--zt
- 专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)
- 专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)
- MSSQL 存储过程分页 测试 1
- ASP.NET 高效分页存储过程 测试通过
- 通用存储过程分页---(测试能用的请放心试用)
- SqlServer存储过程分页:大数据量分页存储过程效率测试附代码
- 在SQLServer2005下的通用分页存储过程
- Asp+Sqlserver2005 分页存储过程
- 专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)
- ssh三大框架,三层架构 整合测试!完整分页代码,JdbcTemplate等测试,存储过程调用,留着以后复习吧
- sqlserver2005利用临时表和@@RowCount提高分页查询存储过程性能示例分享