All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
GridView中利用隐藏的TemplateFied来进行数据访问_[Asp.Net教程]
如何在ASP.Net中实现RSA加密_.net资料_编程技术
LINQ体验(15)——LINQ,to,SQL语句之用户定义函数_[Asp.Net教程]
PHP成为中国应用最广的网页编程语言_php资料_编程技术
制作网站前看看这些好的网页技术规范_[Html教程]
XHTML代码的基本应用_[Html教程]
谈几个Sql,server的日志_[SQL,Server教程]
图片保存到数据库和从数据库读取图片并显示_[Asp.Net教程]
Delphi格式输入组件(TMaskEdit)使用实例
PEAR简介-用PEAR来写你的下一个php程序_php资料_编程技术
Reading number is top 10 pictures
美丽的少女1
Go to the national museum3
NeedWallpaper10
一万二一支的万珂,用得真心肉疼。
陪睡门马睿菈自曝写真 称首拍大尺度照片3
29 the belle stars after bath figure5
So beauty, will let you spray blood10
避免防盗门的猫眼变成钥匙眼
美洲杯宝贝的雨中风情2
Sell the barbecue as says father du breul5
Download software ranking
打鸟视频
jdk1.6 for windows
Dance with duck(male prostitution)
Sora aoi, the maid, students' uniforms
Unix video tutorial5
Such love down(擒爱记)
Boxer's Top ten classic battle2
卡丁车单机版
仙剑奇侠传98版歌曲
Eclipse 4.2.2 For Win64
归海一刀 published in(发表于) 2014/1/30 1:09:46 Edit(编辑)
千万级数据分页详细设计_[Asp.Net教程]

千万级数据分页详细设计_[Asp.Net教程]

千万级数据分页详细设计_[Asp.Net教程]























贴的html代码太难看了。直接贴成黑白的吧,能看清楚。




千万级数据分页详细设计




1. 引言
1.1目的
为适应大数据量分页的需要,为以后千万级数据分页提供解决方法或者参考,节省开发时间,特制定本详细设计方案




1.2主要阅读对象
脚本设计人员




1.3参考资料
http://www.cnblogs.com/SGSoft/archive/2004/10/23/55800.html




2. 详细设计
2.1分页存储过程
2.1.1简介
2.1.2分页存储过程代码
以下代码是网上找的分页存储过程,我是在原存储过程的基础上加了一个@IsCount bit = 0, 主要是用来返回纪录总数,当为非0值时返回。下面注释部分是原作者的测试部分。我在本机sql server 2005上的测试是在10000011纪录中查询第100000页,每页10条纪录按升序和降序时间均为0.38秒,测试语法如下:exec GetRecordFromPage tbl_Briefness,I_BriefnessID,10,100000,其中在tbl_Briefness表I_BriefnessID字段上建立了索引。







/*




经测试,在14483461 条记录中查询第100000 页,每页10 条记录按升序和降序第一次时间均为0.47 秒,第二次时间均为0.43 秒,测试语法如下:




exec GetRecordFromPage news,newsid,10,100000




news 为表名, newsid 为关键字段, 使用时请先对newsid 建立索引。







函数名称: GetRecordFromPage




函数功能: 获取指定页的数据




参数说明: @tblName 包含数据的表名




@fldName 关键字段名




@PageSize 每页记录数




@PageIndex 要获取的页码




@OrderType 排序类型, 0 - 升序, 1 - 降序




@strWhere 查询条件(注意: 不要加where)




创建时间: 2004-07-04




修改时间: 2008-02-13




*/




Alter PROCEDURE [dbo].[GetRecordFromPage]




@tblName varchar(255), -- 表名




@fldName varchar(255), -- 字段名




@PageSize int = 10, -- 页尺寸




@PageIndex int = 1, -- 页码




@OrderType bit = 0, -- 设置排序类型, 非0 值则降序




@IsCount bit = 0, -- 返回记录总数, 非0 值则返回




@strWhere varchar(2000) = '' -- 查询条件(注意: 不要加where)







AS







declare @strSQL varchar(6000) -- 主语句




declare @strTmp varchar(1000) -- 临时变量




declare @strOrder varchar(500) -- 排序类型







if @OrderType != 0




begin




set @strTmp = '<(select min'




set @strOrder = ' order by [' + @fldName + '] desc'




end




else




begin




set @strTmp = '>(select max'




set @strOrder = ' order by [' + @fldName +'] asc'




end







set @strSQL = 'select top ' + str(@PageSize) + ' * from ['




+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['




+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['




+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'




+ @strOrder







if @strWhere != ''




set @strSQL = 'select top ' + str(@PageSize) + ' * from ['




+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['




+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['




+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '




+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder







if @PageIndex = 1




begin




set @strTmp = ''




if @strWhere != ''




set @strTmp = ' where (' + @strWhere + ')'







set @strSQL = 'select top ' + str(@PageSize) + ' * from ['




+ @tblName + ']' + @strTmp + ' ' + @strOrder




end




if @IsCount != 0




set @strSQL = 'select count(' + @fldName + ') as Total from [' + @tblName + ']'




exec (@strSQL)




2.2千万级数据分页实现
2.2.1简介
这次分页我是用Gridview来实现的,测试时间没算,但基本上从10000011纪录中一次查询25条纪录,在10万页以内,时间花费 在1秒以内,10万页以上也不超过2秒。使用其他控件比如DataGrid,DataList或者DataReapter应该花费的时间更短。




2.2.2适用对象
服务器端控件Gridview,DataGrid,DataList,DataReapter等数据绑定控件




2.2.3分页实现
分页效果图如下:





前台控件代码和功能描述如下




控件代码
功能描述




Width="100%" height="35">
显示当前页数据,其中AllowPaging="false",就是去掉自带的分页功能


用来纪录或者显示当前页


用来纪录或者显示所有纪录数


用来纪录或者显示总页数

onClick="lnkbtnFrist_Click">9
首页,点击则翻到第一页

onClick="lnkbtnPre_Click">7
上一页,点击进入上一页

onClick="lnkbtnNext_Click">8
下一页,点击进入下一页

onClick="lnkbtnLast_Click">:
末页,点击进入最后一页

onkeypress="myKeyDown();">
输入要跳转到的某一页的具体数字,只允许输入大于0的数字,输入0或者大于总页数时,弹出警告提示

onClick="BtnChangePage_Click" />
执行具体的页面跳转







前台代码如下:
































Width="100%" height="35">


































<%# Container.DataItemIndex+1 %>




















































当前第




页,




总共条纪录,




页,







onClick="lnkbtnFrist_Click">9




onClick="lnkbtnPre_Click">7




onClick="lnkbtnNext_Click">8




onClick="lnkbtnLast_Click">:




跳转到第onkeypress="myKeyDown();">onClick="BtnChangePage_Click" />











































后台代码如下:




相关解释请看代码注释




using System;




using System.Data;




using System.Configuration;




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;







public partial class _Default : System.Web.UI.Page




{




protected void Page_Load(object sender, EventArgs e)




{




if (!Page.IsPostBack)




{




TestDataCount();




BindPaperDefineProgramme(1);




}




}







#region 绑定试卷定义方案列表




///




/// 统计该表的所有纪录




///




private void TestDataCount()




{




DataTable dt = null;




try




{




//public static DataTable GetTestData(string tableName, int pageSize, int pageIndex,string columnName,bool isCount)




//第一个参数为要查询的表,第二个参数为每页的纪录数,这里定为25,第三个为页码,这里初始化为第1页,第四个参数为表的字段




//,第五个参数为是否返回纪录总数,这里为true表示返回纪录总数




dt = ExecProc.GetTestData("tbl_Briefness", 25, 1, "I_BriefnessID",true);




}




catch (Exception ex)




{




Response.Write(ex.Message);




return;




}




if (dt.Rows.Count == 0)




{




GridView1.Visible = false;




panPage.Visible = false;




lbNoMessage.Visible = true;




}




else




{




GridView1.Visible = true;




panPage.Visible = true;




lbNoMessage.Visible = false;




lblRecodeCount.Text = dt.Rows[0]["Total"].ToString();




lblCurrentPage.Text = "1";//初始化当前页为第一页




int recodeCount = int.Parse(dt.Rows[0]["Total"].ToString()); //获取纪录总数




int pageSize = recodeCount % 25 == 0 ? recodeCount / 25 : recodeCount / 25 + 1;//计算总页数




lblPageCount.Text = pageSize.ToString();//保存总页数




}







}




#endregion







#region 绑定试卷定义方案列表




///




/// 根据当前页码查询需要的数据




///




/// 页码




private void BindPaperDefineProgramme(int pageIndex)




{




DataTable dt = null;




try




{




dt = ExecProc.GetTestData("tbl_Briefness", 25, pageIndex, "I_BriefnessID", false); //根据页码查询需要的纪录




}




catch (Exception ex)




{




Response.Write(ex.Message);




return;




}




if (dt.Rows.Count == 0)




{




GridView1.Visible = false;




panPage.Visible = false;




lbNoMessage.Visible = true;




}




else




{




GridView1.Visible = true;




panPage.Visible = true;




lbNoMessage.Visible = false;




GridView1.DataSource = dt;




GridView1.DataBind();




}




int pageCount = int.Parse(lblPageCount.Text); //获取总页数




if (pageIndex == 1) //如果是第一页,则第一页灰显,作用是避免不必要的点击造成没必要的数据传输




{




lnkbtnFrist.Enabled = false;




}




else




{




lnkbtnFrist.Enabled = true;




}




if (pageIndex > 1) //如果当前页大于1,则上一页显示,否则灰显




{




lnkbtnPre.Enabled = true;




}




else




{




lnkbtnPre.Enabled = false;




}




if (pageIndex < pageCount)//如果当前页小于总页数,则下一页显示,否则灰显




{




lnkbtnNext.Enabled = true;




}




else




{




lnkbtnNext.Enabled = false;




}




if (pageIndex == pageCount)//如果当前页为最后一页,则末页灰显




{




lnkbtnLast.Enabled = false;




}




else




{




lnkbtnLast.Enabled = true;




}







}




#endregion







#region 翻页相关的事件




///




/// 处理翻页事件




///




///




///




protected void lnkbtnFrist_Click(object sender, EventArgs e) //第一页




{




lblCurrentPage.Text = "1";




BindPaperDefineProgramme(1);




}




protected void lnkbtnPre_Click(object sender, EventArgs e) //上一页




{




int pageIndex = int.Parse(lblCurrentPage.Text);




if (pageIndex > 0)




{




pageIndex--;




lblCurrentPage.Text = pageIndex.ToString();




BindPaperDefineProgramme(pageIndex);




}




}




protected void lnkbtnNext_Click(object sender, EventArgs e)//下一页




{




int pageIndex = int.Parse(lblCurrentPage.Text);




int pageCount = int.Parse(lblPageCount.Text);




if (pageIndex < pageCount)




{




pageIndex++;




lblCurrentPage.Text = pageIndex.ToString();




BindPaperDefineProgramme(pageIndex);




}




}




protected void lnkbtnLast_Click(object sender, EventArgs e)//末页




{




lblCurrentPage.Text = lblPageCount.Text;




BindPaperDefineProgramme(int.Parse(lblPageCount.Text));




}




#endregion




protected void BtnChangePage_Click(object sender, EventArgs e)//跳转到指定页




{




int pageIndex = int.Parse(txtPageIndex.Text);




int pageCount = int.Parse(lblPageCount.Text);




if (pageIndex == 0)//如果为0,则提示错误




{




Response.Write("");




return;




}




if (pageIndex > pageCount)//如果大于总页数则提示错误




{




Response.Write("");




return;




}




lblCurrentPage.Text = pageIndex.ToString();




BindPaperDefineProgramme(pageIndex);




}




}

来源:csdn













































添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.