百万条数据分页

手把手教你实现数据库分页查询 text{总页数} = \lceil \frac{\text{总记录数}}{\text{每页记录数}} \rceil = \lceil \frac{105}{10} \rceil = 11。分页查询是数据库开发中非常重要的一项技术,尤其是在处理大数据量的应用中。\text{总页数} = \lceil \frac{\text{总记录数}}{\text{每页记录数}} \rceil。:根据当前页码和每页显示的记录数,从数据库中提取对应的数据。:根据每页显示的记录数和总记录数计算总页数。 阅读详情

写出代码之前,先说明一下原理,比较简单。有一张表(test)如下 
结构是:id(自动编号) txt   假设40条记录)
现在要每页显示10条记录,则每页要显示的数据应该是:
第一页:1----10
第二页:11----20
第三页:21----30
第四页:31----40

如要显示第一页,最简单的方法就是 select top 10 * from test 就OK了。

第二页开始呢?怎么做呢?请接着看:
比如我要显示第三页:也就是21----30
原理:找出不要的数据也就是1----20,最大的id,这是里20
再找出大于这个id(20) 前10条记录就OK了。

原理知道后写代码就简单了,前台界面比较简单,不多说,代码如下
后台代码:

<asp:LinkButton id="lbtnFirst" Runat="server">首頁</asp:LinkButton>
<asp:LinkButton id="lbtnBack" Runat="server">上頁</asp:LinkButton>
<asp:LinkButton id="lbtnNext" Runat="server">下頁</asp:LinkButton>
<asp:LinkButton id="lbtnLast" Runat="server">尾頁</asp:LinkButton>
<asp:Label id="Label1" runat="server">当前页:</asp:Label>
<asp:Label id="lblCurrentPage" runat="server">1</asp:Label>
<asp:Label id="Label2" runat="server">总页:</asp:Label>
<asp:Label id="lblPageCount" runat="server">200</asp:Label>
<asp:Label id="Label3" runat="server">跳转:</asp:Label>
<asp:TextBox id="txtToPage" runat="server" Width="88px"></asp:TextBox>
<asp:Button id="btnToPage" runat="server" Text="go"></asp:Button>
<asp:DataGrid id="DataGrid1" runat="server" AllowPaging="True" AllowCustomPaging="True"></asp:DataGrid>

 

 

private void Page_Load(object sender, System.EventArgs e)
  
{
   
if (!Page.IsPostBack)
   
{
    
//开始显示第一页
    ShowDate(Convert.ToInt64(lblCurrentPage.Text));
   }

  }


  
/// <summary>
  
/// 显示数据
  
/// </summary>
  
/// <param name="page"></param>

  private void ShowDate(long page)
  
{
        
           
   
/*-------------------设置参数------------------*/

   
string tblName  = "test";
   
string fldName  = "id";
   
string orderStr = "asc";
   
int  PageSize = 10;
    
   
/*-------------------设置结束------------------*/

   
byte[] t =Convert.FromBase64String(System.Configuration.ConfigurationSettings.AppSettings["conStr"]);

   
string conStr = System.Text.ASCIIEncoding.ASCII.GetString(t);


   SqlConnection conn 
= new SqlConnection(conStr);
   conn.Open();
   SqlCommand cmd 
= new SqlCommand("select count(*) from " + tblName,conn);
   lblPageCount.Text 
= Convert.ToString(((int)cmd.ExecuteScalar() / PageSize + 1));
   DataGrid1.VirtualItemCount 
= Convert.ToInt32(lblPageCount.Text);//datadrid每次就显示一页,所有要手动加上总页
   
   
string sql = string.Empty;

   sql 
= "select top " + Convert.ToString((page - 1) * PageSize) + " " + fldName + " from " + tblName +  " order by " + fldName + " " + orderStr; //排除的记录部分
   sql = "select max (" + fldName + ") from ( " + sql + " ) as t"; //得到排除记录里的最大ID号
   sql = "select top " + PageSize.ToString() + " * from " + tblName + " where " + fldName + ">(" + sql + ") order by " + fldName + " " + orderStr;
   
   
if (page == 1){sql = "select top " + PageSize + " * from " + tblName;lblCurrentPage.Text = "1";}

   
try
   
{
    SqlDataAdapter da 
= new SqlDataAdapter(sql,conn);
    System.Data.DataSet ds 
= new DataSet();
    da.Fill(ds);
    DataGrid1.DataSource 
= ds.Tables[0].DefaultView;
    DataGrid1.DataBind();  

    conn.Close();

   }

   
catch ( Exception ex)
   
{
    Response.Write(ex.Message.ToString());
   }

   
  }


  
/// 首页
  private void lbtnFirst_Click(object sender, System.EventArgs e)
  
{
   lblCurrentPage.Text 
= "1";
   ShowDate(
1);
  }


  
/// 上页
  private void lbtnBack_Click(object sender, System.EventArgs e)
  
{
   
if (lblCurrentPage.Text != "1")
   
{
    lblCurrentPage.Text 
= Convert.ToString(Convert.ToInt64(lblCurrentPage.Text) - 1);
    ShowDate(Convert.ToInt64(lblCurrentPage.Text));
   }

  }


  
/// 下页
  private void lbtnNext_Click(object sender, System.EventArgs e)
  
{
   
if (lblCurrentPage.Text != lblPageCount.Text)
   
{
    lblCurrentPage.Text 
= Convert.ToString(Convert.ToInt64(lblCurrentPage.Text) + 1);
    ShowDate(Convert.ToInt64(lblCurrentPage.Text));
   }

  }


  
/// 尾页
  private void lbtnLast_Click(object sender, System.EventArgs e)
  
{
   lblCurrentPage.Text 
= lblPageCount.Text;
   ShowDate(Convert.ToInt64(lblPageCount.Text));
  }


  
/// 跳转
  private void btnToPage_Click(object sender, System.EventArgs e)
  
{
   
if ( Convert.ToInt64(txtToPage.Text.Trim()) > 0 && Convert.ToInt64(txtToPage.Text.Trim()) < Convert.ToInt64(lblPageCount.Text))
   
{
    lblCurrentPage.Text 
= txtToPage.Text;
    ShowDate(Convert.ToInt64(txtToPage.Text));
   }

  }


  
/// dataGrid单击的页数
  private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
  
{
   DataGrid1.CurrentPageIndex 
= e.NewPageIndex;
   lblCurrentPage.Text 
= Convert.ToString(e.NewPageIndex + 1);
   ShowDate(e.NewPageIndex 
+ 1);
  }

 

亲自测试sql2000 460万条记录,显示速度很快 
一千万条以上记录分页数据库优化经验总结 别人写的一篇文章,觉得不错,分享给大家。 立即下载

相关推荐

MySQL百万级数据量分页查询方法及其优化建议

数据库SQL优化是老生常谈的问题,在面对百万级数据量的分页查询,又有什么好的优化建议呢?下面将列举了一些常用的方法,供大家参考学习! 方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺点: 全表扫描,速度会很慢 且 有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是从结果集的M位置处取出N条输出,其余抛弃. 方法2: 建立主键或唯一索引, 利用索引(假设每页10条) 语句样式: M

面试官问:MySQL中百万级数据量,如何分页查询?

方法1: 直接使用数据库提供的SQL语句语句样式:MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N适应场景:适用于数据量较少的情况(元组百/千级)原因/缺点:全表扫描,速度会很慢 且 有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是从结果集的M位置处取出N条输出,其余抛弃.方法2:建立主键或唯一索引, 利...

Java精选 2480

MySQL单表百万数据记录分页性能优化技巧

自己的一个网站,由于单表的数据记录高达了一百万条,造成数据访问很慢,Google分析的后台经常报告超时,尤其是页码大的页面更是慢的不行

MySQL 百万级数据,如何做分页查询?

随着业务的增长,数据库的数据也呈指数级增长,拿订单表为例,之前的订单表每天只有几千个,一个月下来不超过十万。而现在每天的订单大概就是2w+,目前订单表的数据已经达到了700w。这带来了各种各样的问题,今天我先从一个小问题开始。之前所写的代码mysql的分页都是采用的limit方式进行,这种方式固然代码比较简单,但数据量大了之后真的是查的慢。所以此处涉及到mysql大数据量后的分页查询方法及其优化技巧。

zhiyikeji的博客 3421

RGB接口电容触摸屏驱动(一)模块介绍

RGB接口电容触摸屏驱动(一)模块介绍

杰克拉力船长个人博客 7877

Win11下Android模拟器报HAXM未安装?三步搞定虚拟化配置(附终端命令)

本文详细解析了Win11下Android模拟器HAXM报错的解决方案,从虚拟化配置到终端命令实战。通过检查BIOS设置、调整Windows功能及执行PowerShell命令,三步搞定虚拟化配置问题,有效提升模拟器性能。特别针对Win11与HAXM的兼容性问题提供了专业指导。

weixin_29215815的博客 143

百万条数据如何进行分页查询

今天面试被问到一张表 有500w条数据,如何进行分页查询,瞬间不知道怎么回答,平时工作中没接触到这么大的数据量。 所以回家自己去实验一下: 创建一张user表 CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(100) DEFAULT NULL COMMENT '用户名'...

城北荆无命的博客 3331

芯片硅前验证技术与驱动工程师实战指南

硅前验证是芯片开发流程中的关键环节,通过pre-silicon simulation等技术手段在流片前验证设计正确性。其核心技术包括软件仿真、FPGA原型验证和硬件仿真器解决方案,涉及Linux驱动开发、芯片架构理解和波形分析等核心技能。作为连接芯片设计与系统集成的桥梁,硅前验证能早期发现设计缺陷,节省数百万美元流片成本。以Cadence Palladium为代表的硬件仿真器,通过专用服务器系统实现比纯软件方案快100-1000倍的仿真速度,为驱动工程师提供完整的外设模型验证环境。掌握硅前验证技术可显著提升

weixin_42522857的博客 323

MySQL和SQLSugar百万条数据查询分页优化

在面对百万条数据的查询时,优化MySQL和SQLSugar的分页性能是非常重要的。通过合理使用索引、调整查询语句、使用缓存以及采用高效的分页策略,可以显著提高查询效率。本文介绍的技巧和方法,可以为开发人员在数据处理和查询优化中提供有效的指导,提升系统的性能和用户体验。

yuan19997的博客 874

基于小波变换的信号降噪处理及仿真研究_信号处理方法推荐--1(转载自用,侵删)...

综述作者:aresmiki链接:https://www.zhihu.com/question/23701194/answer/167005497来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。非平稳信号处理应该是现在信号处理技术最新的也是最热的研究方向了,信号处理方法从最早的时域统计到傅里叶变换的频域分析,是人们认识信号本质的一次巨大飞跃,给了分析人员换个角度看世界的...

weixin_32144483的博客 1249

基于STM32设计的计算器(实现基本运算)

当前文章介绍的是STM32+LCD触摸屏设计的一个触摸计算器功能,实现基本的加减乘除,二进制转换显示等功能。LCD屏使用的是3.5寸带触摸屏的显示屏,方便操作屏幕,MCU采用STM32F103ZET6。

8817

mysql一百万数据怎么分页,mysql百万条数据分页,该怎么处理

当前位置:我的异常网» MySQL»mysql百万条数据分页,该怎么处理mysql百万条数据分页,该怎么处理www.myexceptions.net网友分享于:2013-10-22浏览:46次mysql百万条数据分页我的ecs_goods表中有300万数据我要进行分页explain SELECT goods_id, goods_name, goods_type, goods_sn, s...

weixin_28876083的博客 178

海康visionmaster-渲染结果:通过绑定流程或模块获取 渲染结果的方法

海康visionmaster-渲染结果:通过绑定流程或模块获取 渲染结果的方法

视觉人机器视觉的博客 2639

Mysql数据分页查询百万条数据如何优化查询速度

文章目录写在前面一、mysql百万条数据分页查询遇到情景?二、如何优化查询1.优化前查询语句2.添加子查询后3.添加between总结 写在前面 某天我被一个自称技术总监的人问了一个问题,就标题这个,因为我实在没遇到过这种问题,哈哈哈,菜了;然后直接回答了不知道,所以回来之后我就自己实现并找寻了些优化方法,以供参考 提示:以下是本篇文章正文内容,下面案例可供参考 一、mysql百万条数据分页查询遇到情景? 没有到过这种情况的小伙伴可能会想,分页查询怎么会慢;在当你查询limit(1000000,10),

xf-阿飞大大 2071

MTK 平台功耗优化策略全解析:Clock 管控、GPU 同步与 Preview 降帧实战方案

在中高端移动终端影像系统中,Camera 模块已成为功耗的关键来源之一,尤其是在高帧率拍摄、AI 模式实时预览等场景下,ISP、Sensor、GPU 与 SoC 时钟频率的大幅提升极易引发系统发热与续航瓶颈。MTK 平台基于多级功耗控制机制,构建了包括 Clock Gate 管理、GPU 时序协同、预览流降帧、Pipeline 低功耗切换等在内的影像功耗优化策略。本文聚焦于 MTK Camera 系统中的核心功耗控制点,基于实际项目部署案例,系统拆解其在不同模式下的节能路径设计与调试方法,为终端厂商与影像系

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2527

AI人工智能领域多模态数据融合在智能诊断系统的应用案例

在医疗诊断领域,单一模态数据(如CT影像或电子病历)的局限性日益凸显——就像老中医只"望"不"闻"会漏掉关键线索。本文将深入解析多模态数据融合技术如何突破这一瓶颈:从生活化的"中医四诊"类比切入,拆解数据层/特征层/决策层融合的技术原理;结合肺癌智能诊断的真实案例,展示CT影像、病理文本、基因数据、生命体征的多模态融合全流程;最后探讨技术落地的核心挑战与未来方向。无论你是医疗从业者、AI开发者,还是对智能诊断感兴趣的爱好者,都能从中获得技术启发与应用思路。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 833

mysql百万数据分页_mysql百万条数据分页,该怎么处理

mysql百万条数据分页我的ecs_goods表中有300万数据我要进行分页explain SELECT goods_id, goods_name, goods_type, goods_sn, shop_price, is_on_sale, is_best, is_new, is_hot, sort_order, goods_number, integral, (promote_price &gt...

weixin_27427397的博客 337

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SQL 高效分页(百万条数据)OFFSET / FETCH 分页

第一种方法效率最高 SELECT TOP 页大小 * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1 ) as A WHERE RowNumber > 页大小*(页数-1) 注解:首先利用Row_number()为table1表的每一行添加一个行号,给行号这一列取名'RowN

Fanbin168的专栏 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

SQL高效分页(百万条数据)

首页 &gt; 数据库 &gt; SQL Server &gt; 正文SQL高效分页(百万条数据)2014-12-06 09:23:18      0个评论    来源:Fanbin168的专栏  收藏   我要投稿 参考资料:SQL分页语句 第一种方法:效率最高   ? 1 2 3 4 5 6 7 8 9 10 11 SELECT TOP 页大小 * FROM   ...

weixin_34214500的博客 245

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

mysql分页sql语句优化,mysql 百万条数据分页优化

/*********************************************类名: PageSupport功能:分页显示MySQL中的数据***********************************************/class PageSupport{//属性var $sql; //所要显示数据的SQL查询语句var $page_size; //每页显示最多行数v...

weixin_34060561的博客 150
上一篇: .Net面试法宝(面试题收集)
下一篇: SQL的事务处理
CQP
CQP
博客等级 码龄25年 48粉丝 205原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值