当前位置:  数据库>sqlserver

大数据量分页存储过程效率测试附测试代码与结果

    来源: 互联网  发布时间:2014-09-05

    本文导语:  测试环境 硬件:CPU 酷睿双核T5750 内存:2G 软件:Windows server 2003 + sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 代码如下: create database data_Test --创建数据库 data_Test  GO use data_Test GO create tab...

测试环境
硬件:CPU 酷睿双核T5750 内存:2G
软件:Windows server 2003 + sql server 2005
OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable
代码如下:

create database data_Test --创建数据库
data_Test 
GO
use data_Test
GO
create table tb_TestTable --创建表
(id int identity(1,1) primary key,
userName nvarchar(20) not null,
userPWD nvarchar(20) not null,
userEmail nvarchar(40) null)
GO

然后我们在数据表中插入2000000条数据:

代码如下:

--插入数据
set identity_insert tb_TestTable on
declare @count int
set @count=1
while @count最大ID值和中间变量
(
@pageIndex int,
@pageSize int
)
as
declare @count int
declare @ID int
declare @timediff datetime
declare @sql nvarchar(500)
begin
set nocount on;
select @count=0,@ID=0,@timediff=getdate()
select @count=@count+1,@ID=case when @count@pageSize*@pageIndex and IDRankrow_number>not in>临时表>中间变量
于是我对效率最高的select max方法用2分法进行了扩展,代码取自互联网,我修改了ASC排序时取不到值的BUG,测试结果:
2分法 156ms 156ms 180ms 470ms 156ms 1*
从测试结果来看,使用2分法确实可以提高效率并使效率更为稳定,我又增加了第159999页的测试,用时仅296ms,效果相当的不错!
下面是2分法使用select max的代码,已相当完善。

代码如下:

--/*-----存储过程 分页处理 孙伟 2005-03-28创建 -------*/
--/*-----存储过程 分页处理 浪尘 2008-9-1修改----------*/
--/*----- 对数据进行了2分处理使查询前半部分数据与查询后半部分数据性能相同 -------*/

alter PROCEDURE proc_paged_2part_selectMax
(
@tblName nvarchar(200), ----要显示的表或多个表的连接
@fldName nvarchar(500) = '*', ----要显示的字段列表
@pageSize int = 10, ----每页显示的记录个数
@page int = 1, ----要显示那一页的记录
@fldSort nvarchar(200) = null, ----排序字段列表或条件
@Sort bit = 0, ----排序方法,0为升序,1为降序(如果是多字段排列Sort指代最后一个排序字段的排列顺序(最后一个排序字段不加排序标记)--程序传参如:' SortA Asc,SortB Desc,SortC ')
@strCondition nvarchar(1000) = null, ----查询条件,不需where
@ID nvarchar(150), ----主表的主键
@Dist bit = 0, ----是否添加查询字段的 DISTINCT 默认0不添加/1添加
@pageCount int = 1 output, ----查询结果分页后的总页数
@Counts int = 1 output ----查询到的记录数
)
AS
SET NOCOUNT ON
Declare @sqlTmp nvarchar(1000) ----存放动态生成的SQL语句
Declare @strTmp nvarchar(1000) ----存放取得查询结果总数的查询语句
Declare @strID nvarchar(1000) ----存放取得查询开头或结尾ID的查询语句

Declare @strSortType nvarchar(10) ----数据排序规则A
Declare @strFSortType nvarchar(10) ----数据排序规则B

Declare @SqlSelect nvarchar(50) ----对含有DISTINCT的查询进行SQL构造
Declare @SqlCounts nvarchar(50) ----对含有DISTINCT的总数查询进行SQL构造

declare @timediff datetime --耗时测试时间差
select @timediff=getdate()

if @Dist = 0
begin
set @SqlSelect = 'select '
set @SqlCounts = 'Count(*)'
end
else
begin
set @SqlSelect = 'select distinct '
set @SqlCounts = 'Count(DISTINCT '+@ID+')'
end


if @Sort=0
begin
set @strFSortType=' ASC '
set @strSortType=' DESC '
end
else
begin
set @strFSortType=' DESC '
set @strSortType=' ASC '
end



--------生成查询语句--------
--此处@strTmp为取得查询结果数量的语句
if @strCondition is null or @strCondition='' --没有设置显示条件
begin
set @sqlTmp = @fldName + ' From ' + @tblName
set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName
set @strID = ' From ' + @tblName
end
else
begin
set @sqlTmp = + @fldName + 'From ' + @tblName + ' where (1>0) ' + @strCondition
set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName + ' where (1>0) ' + @strCondition
set @strID = ' From ' + @tblName + ' where (1>0) ' + @strCondition
end

----取得查询结果总数量-----
exec sp_executesql @strTmp,N'@Counts int out ',@Counts out
declare @tmpCounts int
if @Counts = 0
set @tmpCounts = 1
else
set @tmpCounts = @Counts

--取得分页总数
set @pageCount=(@tmpCounts+@pageSize-1)/@pageSize

/**//**//**//**当前页大于总页数 取最后一页**/
if @page>@pageCount
set @page=@pageCount

--/*-----数据分页2分处理-------*/
declare @pageIndex int --总数/页大小
declare @lastcount int --总数%页大小

set @pageIndex = @tmpCounts/@pageSize
set @lastcount = @tmpCounts%@pageSize
if @lastcount > 0
set @pageIndex = @pageIndex + 1
else
set @lastcount = @pagesize

--//***显示分页
if @strCondition is null or @strCondition='' --没有设置显示条件
begin
if @pageIndex

    
 
 

您可能感兴趣的文章:

  • 数据模糊测试库 Fuzzino
  • 数据库基准测试工具 LinkBench
  • 数据库性能测试工具 PolePosition
  • 数据库压力测试工具 JDBHammer
  • 数据库测试工具 BenchmarkSQL
  • 数据库性能测试工具 DBT
  • 开源数据库性能测试工具 osdb
  • 数据库单元测试工具 DbUnit
  • 基于测试nginx数据结构的开源库 libngx
  • 测试添加Oracle中Blob数据类型对象
  • 如果测试开发板每秒接收到的最大数据量?
  • XML数据库性能测试 TPoX
  • 请问我要测试数据库是否连接成功,应该咋办?小妹谢谢各位!
  • 用什么可以动态显示测试数据?JTextArea? JTextField ??
  • 如何使用Visual Studio 2010在数据库中生成随机测试数据
  • MySQL与MSSQl使用While语句循环生成测试数据的代码
  • 数据库复制性能测试 推送模式性能测试
  • 三招助你做好Oracle数据库备份测试
  • mysql 动态生成测试数据
  • 并发数据库压力测试的shell脚本代码
  • **关于大数据量如何提高效率。
  • 关于数据库操作效率
  • ?100分求jsp树的原代码 最好是jsp+js+xml 执行效率要高。(从数据库中动态生成的)(散分)
  • 大家谈一下,jsp哪种连接数据库的方式,效率会高一些?能有些代码就更好了,我要用,谢谢
  • 100分求jsp树的原代码 最好是jsp+js+xml 执行效率要高。(从数据库中动态生成的)在线
  • 请问:如何提高查询的效率和优化数据库
  • 求jsp树的原代码,一定要是jsp+js+xml 执行效率要高。(从数据库中动态生成的)
  • 急:如何提高驱动程序的运行效率,处理大数据量??
  • 听说java有一种数据库连接池的方式,效率比使用jdbc驱动程序高。不知是否真的这样?具体方式怎么实现?
  • C++操作MySQL大量数据插入效率低下的解决方法
  • 大家讨论一下用java访问数据库的效率。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 服务器存储快照和数据库快照详解
  • 数据库存储, 改用TXT文件存储
  • 急求 unix 与linux在文件存储上 和数据存储上有哪些不同 希望各路英雄帮忙
  • write函数往套接字文件描述符写入数据的时候数据存储在哪里 ?
  • 数据流的存储方案
  • 随机存储数据库 Aerospike
  • 数据流的存储方案 iis7站长之家
  • 计算机组成原理,数据如何从存储设备的缓存转移到内存,是什么在控制数据的传输
  • 数据库存储还是直接存储在硬盘上好?(来者有分)
  • 数据表和存储管理服务 HCatalog
  • NoSQL 数据存储系统 Blur
  • 数据存储引擎 HyperLevelDB
  • 采用Jsp从数据库中取得数据,来生成XML文件,进行存储,应该如何做?
  • java数据存储的问题
  • 数据库存储引擎 InnoDB
  • 气象数据存储系统 WDB
  • 分布式数据存储服务器 MckoiDDB
  • PHP的Session数据存储方案 Scache
  • 分页存储过程(用存储过程实现数据库的分页代码)
  • 关于数据存储的问题
  • 轻量级数据存储服务 LLServer
  • java命名空间javax.print类docflavor的类成员方法:服务格式化打印数据定义及介绍
  • 如何监控数据库的数据,如果数据库数据更改,就通知Server
  • <<大话数据结构>>中冒泡排序算法改进
  • 如何从数据库中或文本文件中提取数据到另一个数据库中?
  • java命名空间javax.print类docflavor的类成员方法:客户端格式化打印数据定义及介绍
  • 用JDBC连接Oracle数据库时,如何向数据库中写日期型数据(格式)?谢了!
  • 基于Key-Value的NOSQL数据库Redis的数据结构及常用相关命令介绍
  • linux下用libpcap库函数抓包,如何判断捕获的数据包是IP数据包还是非IP数据包,顺便说一下、捕获的数据包除了IP数据包之外,还有那些种类,非常感谢!!!
  • c#多线程更新窗口(winform)GUI的数据
  • 建立一个ftp数据连接并传送或接受完毕一些数据后,能否不关闭此数据连接,下次接着用?




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3