`
happmaoo
  • 浏览: 4340924 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

大数据量下的分页 (转载)

阅读更多
?
专栏作品
大数据量下的分页
?
对于非常大的数据模型而言,分页检索时,每次都加载整个数据源非常浪费。通常的选择是检索页面大小的块区的数据,而非检索所有的数据,然后单步执行当前行。
??? 本文演示ASP.net的DataGrid和Sql Server 实现大数据量下的分页,为了便于实现演示,数据表采用了Northwind数据库的Orders表(830条记录)。
??? 如果数据表中有唯一的自增索引,并且这个字段没有出现断号现象。检索页面大小的块区数据就非常简单了。通过简单的Sql语句就可以实现这个功能:
select * from orders where orderid between 10248 and 10253
其中,开始编号为:(CurrentPageIndex - 1) * PageSize? 结束编号为:CurrentPageIndex * PageSize
??? 当然,如果这个字段断号不是很严重,而且允许不是很严格的按照每页条数分页,这样的方法也是可以用的。
??? 如果这个字段断号,或者需要按照其他条件排序分页,就要复杂些了。首先要获得这个页面需要显示的编号,
然后再按照这个编号获得需要的块区数据。根据编号获得块区数据很简单。不过用下面方式获得数据排序并不是按
照指定的id列表顺序,这时候还要附加order by 命令。
select * from orders where orderid in (10248,10249,10250,10251,10252,10253) order by orderid desc
?
获得这个页面需要显示的编号列表就复杂多了,而且有多种方案:
方案一:维护一个表,这个表记录需要显示的这些编号排序顺序。(这个表可以是临时表,也可以是物理表)。下面演示了利用一个全局临时表。
这个全局临时表记录需要显示的编号。注意排序,这里的order by 就是需要显示的排序顺序。
?
create table ##temptable( iid int IDENTITY (1, 1) NOT NULL, mainid int NOT NULL ) insert ##temptable(mainid) select OrderID from orders order by OrderID desc select * from ##temptable drop table ##temptable -- 实际执行时候,删除全部临时表当然不再这里执行。
?
这个临时表存在,获得指定分页的分块数据就很简单了。看下面代码:
?
create table ##temptable(iid int IDENTITY (1, 1) NOT NULL,mainid int NOT NULL) insert ##temptable(mainid) select OrderID from orders order by OrderID desc declare @PageSize int,@CurrPage int,@strSQL varchar(2000),@IDStr varchar(1000) select @PageSize = 30 select @CurrPage = 2 select @IDStr = '' select @IDStr = @IDStr + ltrim(rtrim(str(MainID))) + ',' from ##temptable where iid between ((@CurrPage-1)*@PageSize+1) and @CurrPage*@PageSize if @IDStr <> '' begin select @IDStr = left(@IDStr,len(@IDStr)-1) end select @strSQL = 'select * from orders where OrderID in ('+@IDStr+') order by OrderID desc ' exec(@strSQL) drop table ##temptable
分享到:
评论

相关推荐

    批量打印测量数据表格-双面打印-TS09.rar

    测量数据(仅指测量坐标成果数据,一般为南方CASS格式,参见下表)从仪器下载下来后,都需要打印出来签字存档,如果手动排版将是一项繁琐的工作。可在Excel中添加一个宏,将数据读出按格式分页排版,不管有多少数据...

    CSV导出类库(Easy CSV Export)源码

    轻量级的CSV导出类库,代码量小,使用简单,可以导出为File,TextWriter,HttpResponse。 有测试代码可供参考。 欢迎转载。

    2分法分页存储过程脚本实例

    目前针对大数据量的数据显示(100w以上~1000w级别)能找到的最好的分页存储过程就是2分法的存储过程,它避免了以往的分页后面的越来越慢的问题,但是我发现目前网上的能找到的分页存储过程很多是转载的,有很多bug,不...

    简单的网页内容采集器(C#)

    见下图 用户首先填写“起始网页”,即从哪一页开始采集。 然后填写数据库连接字符串,这里是定义了采集到的数据插入到哪个数据库,后面选择表名,不必说了。 &lt;br&gt;网页编码,不出意外的话,中国大陆都...

    oracle代码.rar

    当前是个会信息复杂,数据量巨大,急需一个管理系统来实现对数据的管理。基于此,我设计了学生管理系统。其主要功能: 实现学生信息的管理(管理员) 增加,删除,查询(模糊查询),修改的功能 实现分页功能...

    asp.net知识库

    ADO.NET 2.0 大批量数据操作和多个动态的结果集 ADO.NET 2.0 异步处理 在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+...

    JS组件Bootstrap Table使用方法详解

    bootStrap table 是一个轻量级的table插件,使用AJAX获取JSON格式的数据,其分页和数据填充很方便,支持国际化 三、使用方法 1、引入js、css [js] view plain copy &lt;!--css样式--&gt; &lt;link href="css/...

    最好的asp CMS系统科讯CMSV7.0全功能SQL商业版,KesionCMS V7.0最新商业全能版-免费下载

    而不需要投入过多的时间来学习系统的使用技巧,在细节处下大工夫。 Kesioncms系统功能完善,覆盖面广、扩展性强、负载能力好、模板调用非常灵活、管理方便,因此不仅适合于建设一般企业、政府、学校、个人等小型...

    思康客户管理系统V30

    在广大用户的宝贵建议下,思康软件通过不断努力和改进,于2008年6月发布了客户管理系统V3.0,友好美观的系统操作界面,清晰快捷的菜单设计,方便易用的录入流程,高效科学的数据架构,秉承开源创新的精神,使思康...

    Art2008 CMS 网站管理系统 v3.1.rar

    23、文章页有上一篇,下一篇,长文章可以自动分页,信息量大,适合搜索引擎收录。 24、强大的图片新闻幻灯显示系统,采用FLASH或者纯图片方式,将您的图片文章以融合、百叶窗等多种交替方面幻灯显示,让您的网站与...

    思康客户管理系统2008 V3.0.rar

    在广大用户的宝贵建议下,思康软件通过不断努力和改进,于2008年6月发布了客户管理系统V3.0,友好美观的系统操作界面,清晰快捷的菜单设计,方便易用的录入流程,高效科学的数据架构,秉承开源创新的精神,使思康...

    CMS 网站管理系统 源码

    23、文章页有上一篇,下一篇,长文章可以自动分页,信息量大,适合搜索引擎收录。 24、强大的图片新闻幻灯显示系统,采用FLASH或者纯图片方式,将您的图片文章以融合、百叶窗等多种交替方面幻灯显示,让您的网站与...

    springmybatis

    mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis ...

Global site tag (gtag.js) - Google Analytics