ASP.NET 百万级分页查询续
介绍:
包括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 百万级分页查询续相关推荐
- ASP.NET 百万级分页查询(Oracle)
包括ASP.NET和ASP.NET AJAX + JSON两个DEMO,最低耗时35ms左右(AJAX+JSON).百万级数据库查询分页,使用Oracle 存储过程.Asp.net 2.0 + ,Or ...
- oracle分页查询加总数,oracle count 百万级 分页查询记要总数、总条数优化
oracle count 百万级 分页查询记录总数.总条数优化 oracle count 百万级 查询记录总数.总条数优化 最近做一个项目时,做分页时,发现分页查询速度很慢,分页我做的是两次查询,一次 ...
- mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...
这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...
- mysql百万级分页优化
普通分页 数据分页在网页中十分多见,分页一般都是limit start,offset,然后根据页码page计算start select * from user limit 1,20 这种分页在几十万的 ...
- ASP+Access网站开发相关 【2】ASP + Access登录 列表 分页 查询
包含两个文件:管理员登陆页面adminsearch.asp conn.asp和登录成功之后需要跳转到的查询页面search.asp 1.文件名:adminsearch.asp <%@LANGU ...
- 分页查询千万级数据慢
mysql查询千万级数据越来越慢优化: 1.分表:(固定某个表存多少数量的数据:例如:一张表存100w的数据量); 2.优化sql和建立适合的索引(复合索引); 3.使用redis缓存.(redis存 ...
- mysql 优化实例(百万级数据)
2019独角兽企业重金招聘Python工程师标准>>> MySql 这个数据库绝对是适合dba级的高手去玩的,一般做一点1万篇新闻的小型系统怎么写都可以,用xx框架可以实现快速开发. ...
- mysql关联表分页查询_MySQL一对多分页查询-主表关联表条件查询问题
文章目录 1 摘要 2 情景复现 2.1 数据模型 2.2 核心代码 2.3 测试数据 2.4 拓展一点 1 摘要 分页查询是后台项目中最常见的一种操作,在一对多(one to many)的关系表中, ...
- Oracle 分页查询的高效写法
最近遇到了这个问题,整理下Oracle 分页查询的高效写法 一. 低效与高效写法对比 低效的写法 select column_lists from (select rownum as rn,A.* ...
最新文章
- TIOBE 6 月榜单: Python 有望超越 C 语言成为第一名
- 大型网站架构演化发展历程
- IE和DOM事件流、普通事件和绑定事件的区别
- 整数划分问题【递归以及递推求解方式】
- maven依赖 spark sql_使用Kafka+Spark+Cassandra构建实时处理引擎
- 16.1 用auth0服务 实现用登录和管理 使用auth版本的2个大坑。
- java数据段 静态区_linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】...
- postman+newman生成html报告
- SLAM技术的应用及发展现状
- Windows NT Backup - 恢复工具 - Windows Vista的迁移工具
- border-collapse
- 2009国家公务员面试过关点点通
- 过滤钩子驱动程序一(微软DDK文档,FLASHSKY翻译)
- php整人代码,HTML代码整人。。
- 毕设-基于Qt的餐饮ERP管理系统
- 第一章 机器学习(浙大胡浩基教授)
- 他一个人干掉了5个装甲军
- Windows系统安装jdk17
- 2、ThreadX 操作系统
- 苏轼的《题西林壁》与王安石的《登飞来峰》著作于同一时期,对读比较两诗,总觉字里行间似有同出一辙的蛛丝马迹...
热门文章
- Windows 10半年成全球第二!中国悲剧了
- JavaScript学习笔记 - 基础排序算法
- Java技术系列文章汇集(长期更新)
- UIScrollView相关问题(计算分页)
- Windows XP Embedded with Service Pack 2 开发包光盘 3CD
- Nginx负载均衡配置和健康检查
- 一款开源免费且快速,高效和安全的跨平台备份程序:Restic使用教程
- 行为设计模式 - 命令设计模式
- “未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决方案
- php 建议查询DNS解析状态工具