同步项目中需要用到百万条数据分页,测试完毕
2009-02-12 14:25
141 查看
测试存储过程如下:
/*建测试用的库和表*/
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
--插入数据
set identity_insert tb_TestTable on
declare @count int
set @count=1
while @count<=2000000
begin
insert into tb_TestTable(id,userName,userPWD,userEmail) values(@count,'admin','admin888','lli0077@yahoo.com.cn')
set @count=@count+1
end
set identity_insert tb_TestTable off
--创建存储过程
create procedure proc_paged_with_notin --利用select top and select not in
(
@pageIndex int, --页索引
@pageSize int --每页记录数
)
as
begin
set nocount on;
declare @timediff datetime --耗时
declare @sql nvarchar(500)
select @timediff=Getdate()
set @sql='select top '+str(@pageSize)+' * from tb_TestTable where(ID not in(select top '+str(@pageSize*@pageIndex)+' id from tb_TestTable order by ID ASC)) order by ID'
execute(@sql) --因select top后不支技直接接参数,所以写成了字符串@sql
select datediff(ms,@timediff,GetDate()) as 耗时
set nocount off;
end
下面是测试在asp.net中调用:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class testDatagrid : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.DataGrid1.VirtualItemCount = 200000;
if (!Page.IsPostBack)
{
this.DataGrid1.DataSource = ListProduct(0, 100).Tables[0];
this.DataGrid1.DataBind();
}
}
//调用存储过程返回记录集
public DataSet ListProduct(int pageIndex, int pageSize)
{
SqlConnection conn = new SqlConnection("Server=mfmdl;database=data_Test;uid=sa;pwd=sa");
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.CommandType = CommandType.StoredProcedure;
comm.CommandText = "proc_paged_with_notin";
SqlParameter Del_Fold_Para1 = new SqlParameter("@pageIndex", SqlDbType.Int);
Del_Fold_Para1.Value = pageIndex;
SqlParameter Del_Fold_Para2 = new SqlParameter("@pageSize", SqlDbType.Int);
Del_Fold_Para2.Value = pageSize;
comm.Parameters.Add(Del_Fold_Para1);
comm.Parameters.Add(Del_Fold_Para2);
SqlDataAdapter adapter = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
adapter.Fill(ds);
return ds;
}
protected void DataGrid1_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
// 设置当前的Page序号值, 如果不设置的话它是不会变得, 这样会给用户造成误解,以为所有页的数据相同。
DataGrid1.CurrentPageIndex = e.NewPageIndex;
this.DataGrid1.DataSource = ListProduct(e.NewPageIndex + 1, DataGrid1.PageSize);
DataGrid1.DataBind();
}
}
/*建测试用的库和表*/
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
--插入数据
set identity_insert tb_TestTable on
declare @count int
set @count=1
while @count<=2000000
begin
insert into tb_TestTable(id,userName,userPWD,userEmail) values(@count,'admin','admin888','lli0077@yahoo.com.cn')
set @count=@count+1
end
set identity_insert tb_TestTable off
--创建存储过程
create procedure proc_paged_with_notin --利用select top and select not in
(
@pageIndex int, --页索引
@pageSize int --每页记录数
)
as
begin
set nocount on;
declare @timediff datetime --耗时
declare @sql nvarchar(500)
select @timediff=Getdate()
set @sql='select top '+str(@pageSize)+' * from tb_TestTable where(ID not in(select top '+str(@pageSize*@pageIndex)+' id from tb_TestTable order by ID ASC)) order by ID'
execute(@sql) --因select top后不支技直接接参数,所以写成了字符串@sql
select datediff(ms,@timediff,GetDate()) as 耗时
set nocount off;
end
下面是测试在asp.net中调用:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class testDatagrid : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.DataGrid1.VirtualItemCount = 200000;
if (!Page.IsPostBack)
{
this.DataGrid1.DataSource = ListProduct(0, 100).Tables[0];
this.DataGrid1.DataBind();
}
}
//调用存储过程返回记录集
public DataSet ListProduct(int pageIndex, int pageSize)
{
SqlConnection conn = new SqlConnection("Server=mfmdl;database=data_Test;uid=sa;pwd=sa");
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.CommandType = CommandType.StoredProcedure;
comm.CommandText = "proc_paged_with_notin";
SqlParameter Del_Fold_Para1 = new SqlParameter("@pageIndex", SqlDbType.Int);
Del_Fold_Para1.Value = pageIndex;
SqlParameter Del_Fold_Para2 = new SqlParameter("@pageSize", SqlDbType.Int);
Del_Fold_Para2.Value = pageSize;
comm.Parameters.Add(Del_Fold_Para1);
comm.Parameters.Add(Del_Fold_Para2);
SqlDataAdapter adapter = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
adapter.Fill(ds);
return ds;
}
protected void DataGrid1_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
// 设置当前的Page序号值, 如果不设置的话它是不会变得, 这样会给用户造成误解,以为所有页的数据相同。
DataGrid1.CurrentPageIndex = e.NewPageIndex;
this.DataGrid1.DataSource = ListProduct(e.NewPageIndex + 1, DataGrid1.PageSize);
DataGrid1.DataBind();
}
}
相关文章推荐
- 同步项目中需要用到百万条数据分页
- mysql中迅速插入百万条测试数据的方法
- 一个好的Performance测试数据仓库需要什么功能
- 同步测试---percona5.6.37-83.0同步数据到mysql5.5.47官方版本
- mysql快速生成百万条测试数据的方法
- 【海量数据测试】大型项目中的海量数据迁移测试实践与方案
- mysql limit 分页数据丢失问题测试
- 测试项目中需要注意的问题
- solr4.7.2开发实践 ——拼音检索【需要用到的包pinyin4j-2.5.0.jar和pinyinAnalyzer.jar;只需要配置schema.xml文件、solrj的java代码测试】
- 0012、node 之简单筛选后台数据以及需要分页时的一种处理方式
- 利用实现数据同步功能, 已经完成测试,可以实现.
- 测试分页查询出数据并分文件导出[java工程]
- 项目测试运行方法需要加载service
- iOS不得姐项目--推荐关注模块(一个控制器控制两个tableView),数据重复请求的问题,分页数据的加载,上拉下拉刷新(MJRefresh)
- SSH框架网上商城项目第15战之线程、定时器同步首页数据
- 【总结】大规模数据测试,数据准备时需要注意的问题(【保护已有数据】【大规模数据影响普通测试】【不要着急删除数据】)
- mysql数据库千万级别数据的查询优化和分页测试
- MYSQL千万级测试1亿数据的分页分析测试(顶)
- 普通方式 分页【NOT IN】和【>】效率大PK 千万级别数据测试结果
- oracle 11.2.0.4 ogg for centos6.8安装及数据半同步测试