介绍:

包括ASP.NET和ASP.NET AJAX + JSON两个DEMO,最低耗时35ms左右(AJAX+JSON)。

百万级数据库查询分页,使用Oracle 存储过程。

代码生成的案例:

Asp.net 2.0 + ,Oracle 10g + 

开发环境:ASP.Net 2.0 - 4.5, Oracle 11g r2

项目开源发布,供下载学习。需要自己建一个TEST数据表,包括3个字段ID,COL1,COL2。

描述:

实现效果

包括ASP.NET和ASP.NET AJAX + JSON两个DEMO,最低耗时35ms左右(AJAX+JSON)。

Oracle Select 查询效率对比

select * from (select rownum ro,t.* from test t where rownum<=900015) where ro>900000; --0.546s Using

select * from test;--Memery Overflow after 505.21s

select * from (select ROW_NUMBER() OVER(ORDER BY id) ro,t.* from test t) where ro>900000 and ro<=900015; --3.791s

select * from test where id>900000 and id <=900015 ; --0.172s

前台AJAX请求使用jQuery,对后台返回的json进行处理。

测试视频:视频(Windows屏幕录像专家录屏)

调用方法:

 <span style="font-size:12px;">protected void Page_Load(object sender, EventArgs e) { Paginator1.QueryTable = "test";//表名,必须 Paginator1.QuerySelect = "rownum 行号,id as 编号,col1 栏目1,col2 as 栏目2" ; Paginator1.QuerySize = 15; Paginator1.QueryConn = ConfigurationManager.ConnectionStrings["Paginator" ].ToString(); Paginator1.QueryWhere = ""; Paginator1.QueryOrder = ""; } </span>

Source Code Files

  • Paginator.ascx #1 - 分页控件.
  • Paginator.ascx.cs #2 - 分页控件后台源码.
  • Paginator.ascx.designer.cs #3 - 不解释
  • SQL_Test.sql #4 - SQL 备份
  • style.css #5 - 样式表
  • Default.aspx #6 - 无AJAX实例
  • Default.aspx.cs #7 -
  • Default.aspx.designer.cs #8 -
  • DemoWithAjax.aspx #9 - 有AJAX的Demo
  • DemoWithAjax.aspx.cs #10 -
  • DemoWithAjax.aspx.designer.cs #11 -
  • EDI_Paginator.sql #12 - 分页SQL
  • 其他文件

More Information

存储过程源码:

<span style="font-size:12px;">/* * 百万级分页存储过程 * Modified by Willin Wang * Jul 23rd, 2012. * http://www.willin.org */ create or replace procedure edi_paginator ( parm_pageID      in number, --页索引,从1开始 parm_pageSize    in number, --每页大小 parm_tblName     in varchar2, --表名 parm_strSelect      in varchar2, --查询内容 parm_strWhere    in varchar2, --where条件 parm_orderBy     in varchar2, --排序条件 parm_ref_cur1    out SYS_REFCURSOR, --总记录数 parm_ref_cur2    out SYS_REFCURSOR --结果集 ) IS v_sql1       VARCHAR2 (2000);                        --获取数据的sql语句 v_sql2       VARCHAR2 (4000); v_pagecount    NUMBER ;                                 --该条件下记录页数 v_row_start    NUMBER ;                                         --开始记录 v_row_end      NUMBER ;                                         --结束记录 v_count        NUMBER; --分页获取数据 BEGIN v_sql1 := 'select count(1) from ' || parm_tblName ; IF parm_strWhere is not NULL OR parm_strWhere <> '' THEN v_sql1 := v_sql1 || ' where 1=1 ' || parm_strWhere; END IF ; EXECUTE IMMEDIATE v_sql1 INTO v_count; OPEN parm_ref_cur1 for v_sql1; --计算数据记录开始和结束 v_pageCount := v_count / parm_pageSize + 1 ; v_row_start := (parm_pageID - 1 ) * parm_pageSize + 1; v_row_end := parm_pageID * parm_pageSize ; v_sql2 := 'select rownum ro, t.* from ' || parm_tblName || ' t'; v_sql2 := v_sql2 || ' where rownum<=' || v_row_end; IF parm_strWhere is not NULL OR parm_strWhere <> '' THEN v_sql2 := v_sql2  || parm_strWhere ; END IF ; IF parm_orderBy is not null and  parm_orderBy <> '' THEN v_sql2 := v_sql2 || ' order by ' || parm_orderBy; END IF ; v_sql2 := 'select '|| parm_strSelect||' from (' || v_sql2 || ') where  ro >=' || v_row_start ; --DBMS_OUTPUT.put_line (v_sql2); OPEN parm_ref_cur2 FOR v_sql2; END edi_paginator; </span>

核心jQuery代码:

<script type="text/javascript">
//<![CDATA[ if (window.jQuery) { jQuery(document).ready( function (w) { w( '.bread input').live('click' , function () { w( '#<% =this.hdCMD.ClientID %>' ).val(w(this).attr( 'id')); }); w( 'form').live('submit' , function () { w.ajax({ url: w( this).attr('action' ), type: 'POST', data: w( this).serialize() + "&pjan=true&querypage=" + w('#<%=this.lblCurPage.ClientID %>').html(), dataType: 'JSON', success: function (result) { //alert(result); var data = result.Table1, meta = result.Table2, tmpHtml = ""; w.each(data, function (rowid, row) { if (rowid % 2 == 0) tmpHtml += "\<tr style='background-color:#EFF3FB;'>" ; else tmpHtml += "\<tr>"; w.each(row, function (colid, col) { tmpHtml += "\<td>" + col + "\<\/td>" ; }); tmpHtml += "\<\/tr>"; }); w( '#<% =this.PageList.ClientID %> tr:gt(0)' ).remove(); w( '#<% =this.PageList.ClientID %> tr:eq(0)' ).after(tmpHtml); w( '#<% =this.lblCurPage.ClientID %>' ).html(meta[1].Meta); w( '#<% =this.lblTimestamp.ClientID %>' ).html(meta[3].Meta); } }); return false ; }); }); }
/*]]>*/
</script> 

ASP.NET 百万级分页查询续相关推荐

  1. ASP.NET 百万级分页查询(Oracle)

    包括ASP.NET和ASP.NET AJAX + JSON两个DEMO,最低耗时35ms左右(AJAX+JSON).百万级数据库查询分页,使用Oracle 存储过程.Asp.net 2.0 + ,Or ...

  2. oracle分页查询加总数,oracle count 百万级 分页查询记要总数、总条数优化

    oracle count 百万级 分页查询记录总数.总条数优化 oracle count 百万级 查询记录总数.总条数优化 最近做一个项目时,做分页时,发现分页查询速度很慢,分页我做的是两次查询,一次 ...

  3. mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...

    这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...

  4. mysql百万级分页优化

    普通分页 数据分页在网页中十分多见,分页一般都是limit start,offset,然后根据页码page计算start select * from user limit 1,20 这种分页在几十万的 ...

  5. ASP+Access网站开发相关 【2】ASP + Access登录 列表 分页 查询

    包含两个文件:管理员登陆页面adminsearch.asp  conn.asp和登录成功之后需要跳转到的查询页面search.asp 1.文件名:adminsearch.asp <%@LANGU ...

  6. 分页查询千万级数据慢

    mysql查询千万级数据越来越慢优化: 1.分表:(固定某个表存多少数量的数据:例如:一张表存100w的数据量); 2.优化sql和建立适合的索引(复合索引); 3.使用redis缓存.(redis存 ...

  7. mysql 优化实例(百万级数据)

    2019独角兽企业重金招聘Python工程师标准>>> MySql 这个数据库绝对是适合dba级的高手去玩的,一般做一点1万篇新闻的小型系统怎么写都可以,用xx框架可以实现快速开发. ...

  8. mysql关联表分页查询_MySQL一对多分页查询-主表关联表条件查询问题

    文章目录 1 摘要 2 情景复现 2.1 数据模型 2.2 核心代码 2.3 测试数据 2.4 拓展一点 1 摘要 分页查询是后台项目中最常见的一种操作,在一对多(one to many)的关系表中, ...

  9. Oracle 分页查询的高效写法

    最近遇到了这个问题,整理下Oracle 分页查询的高效写法 一. 低效与高效写法对比 低效的写法 select column_lists from  (select rownum as rn,A.* ...

最新文章

  1. TIOBE 6 月榜单: Python 有望超越 C 语言成为第一名
  2. 大型网站架构演化发展历程
  3. IE和DOM事件流、普通事件和绑定事件的区别
  4. 整数划分问题【递归以及递推求解方式】
  5. maven依赖 spark sql_使用Kafka+Spark+Cassandra构建实时处理引擎
  6. 16.1 用auth0服务 实现用登录和管理 使用auth版本的2个大坑。
  7. java数据段 静态区_linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】...
  8. postman+newman生成html报告
  9. SLAM技术的应用及发展现状
  10. Windows NT Backup - 恢复工具 - Windows Vista的迁移工具
  11. border-collapse
  12. 2009国家公务员面试过关点点通
  13. 过滤钩子驱动程序一(微软DDK文档,FLASHSKY翻译)
  14. php整人代码,HTML代码整人。。
  15. 毕设-基于Qt的餐饮ERP管理系统
  16. 第一章 机器学习(浙大胡浩基教授)
  17. 他一个人干掉了5个装甲军
  18. Windows系统安装jdk17
  19. 2、ThreadX 操作系统
  20. 苏轼的《题西林壁》与王安石的《登飞来峰》著作于同一时期,对读比较两诗,总觉字里行间似有同出一辙的蛛丝马迹...

热门文章

  1. Windows 10半年成全球第二!中国悲剧了
  2. JavaScript学习笔记 - 基础排序算法
  3. Java技术系列文章汇集(长期更新)
  4. UIScrollView相关问题(计算分页)
  5. Windows XP Embedded with Service Pack 2 开发包光盘 3CD
  6. Nginx负载均衡配置和健康检查
  7. 一款开源免费且快速,高效和安全的跨平台备份程序:Restic使用教程
  8. 行为设计模式 - 命令设计模式
  9. “未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决方案
  10. php 建议查询DNS解析状态工具