前几天遇到一个问题是,数据库一开始有24W是信息,需要取出来,进行下载到excel中。一开始遇到的问题是,excel表格行只有65535条行数,远远不够,有人说了很多其他解决方式,为了快速开发我就直接使用了导出txt文本文件的方式,解决了筛选数据的问题。但是第二天,由于XXXXX活动增量很快,一下子就到了50W左右,之前写的程序莫名其妙的不可以使用了,老是报500的错误,后来按照别人讲的,进行分批次处理,其实就是分页的原理。

下面是代码:

其中mysqli_query语句都被微擎封装过了,可以不用注重具体的语法,看思路。

$sql = "SELECT count(id) AS count FROM `ims_lwxleon_box_data`"; //计算出总记录数 分页处理
$countNum = pdo_fetchall($sql);
$countNum = intval($countNum[0]['count']);//$countNum为int型总记录数
$key = 100000; //设置每次循环取出的记录数
$times = intval(ceil($countNum/$key)); //设置循环次数 向上取整,比如我有245000条数据,每次10W,就是循环25次
$recordList = array();
$keyTypeNum = array(); for ($i=0;$i<$times;$i++){        //循环
$original = ($i)*$key; //设置取记录的初始点
$sql="SELECT keytype,phone FROM `ims_lwxleon_box_data` LIMIT ".$original.','.$key;  //limit查找
$res = pdo_fetchall($sql); foreach ($res as $k => $v){
if (!in_array($v['keytype'],$recordList[$v['phone']])){
$recordList[$v['phone']][] = $v['keytype'];
$keyTypeNum[$v['phone']] += 1;
}
}
//导出1把钥匙 2把钥匙 3把钥匙 4把钥匙 5把钥匙的数据
$oneList=array();
$twoList=array();
$threeList=array();
$fourList=array();
$fiveList=array();
foreach ($keyTypeNum as $k => $v){
switch ($v){
case 1:
$oneList[] = $k;
break;
case 2:
$twoList[] = $k;
break;
case 3:
$threeList[] = $k;
break;
case 4:
$fourList[] = $k;
break;
case 5:
$fiveList[] = $k;
break;
}
} // print_r($recordList);exit();
$title="<tr><td>tel</td></tr>";
$keycount=intval($_GPC['keycount']);
if($keycount==1){
exportTxt('一把钥匙拥有者',$oneList);
}elseif($keycount==2){
$twoList = array_merge($twoList,$threeList);
$twoList = array_merge($twoList,$fourList);
$twoList = array_merge($twoList,$fiveList);
exportTxt('两把钥匙拥有者',$twoList);
}elseif($keycount==3){
$threeList = array_merge($threeList,$fourList);
$threeList = array_merge($threeList,$fiveList);
exportTxt('三把钥匙拥有者',$threeList);
}elseif($keycount==4){
$fourList = array_merge($fourList,$fiveList);
exportTxt('四把钥匙拥有者',$fourList);
}elseif($keycount==5){
exportTxt('五把钥匙拥有者',$fiveList);
}
}
//导出电话号码    每次调用函数的时候,data的数据会自动添加在下载的文档中
function exportTxt($name,$data){
Header( "Content-type: application/octet-stream ");
Header( "Accept-Ranges: bytes ");
header( "Content-Disposition: attachment; filename=".$name.".txt ");
header( "Expires: 0 ");
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0 ");
header( "Pragma: public ");
foreach ($data as $k=>$v){
echo $v."\r\n";
}
}

mysql关于数据量大的时候分页分批处理的更多相关文章

  1. 分布式系统中我们会对一些数据量大的业务进行分拆,分布式系统中唯一主键ID的生成问题

    分布式全局唯一ID生成策略​ https://www.cnblogs.com/vandusty/p/11462585.html 一.背景 分布式系统中我们会对一些数据量大的业务进行分拆,如:用户表,订 ...

  2. 关于dedecms数据量大以后生成目录缓慢的问题解决

    四月份的时候博客被封.我不知情.因为一直很忙,没有来得及看.前两天来看以后,发现居然被封,吓傻了我. 赶紧找原因,原来是转载了某个人的博文,被他举报了,然后就被封了. 觉得很伤心,毕竟这个博客陪伴了我 ...

  3. 使用POI导出EXCEL工具类并解决导出数据量大的问题

    POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...

  4. 大数据量报表APPLET打印分页传输方案

     1 . 问题概述 当报表运算完成时,客户端经常需要调用润乾自带的runqianReport4Applet.jar来完成打印操作, 然而数据量比较大的时候,会导致无法加载完成,直至applet内存 ...

  5. 解决mysql导入数据量很大导致失败及查找my.ini 位置(my.ini)在哪

    数据库数据量很大的数据库导入到本地时,会等很久,然而等很久之后还是显示失败: 这是就要看看自己本地的没mysql是否设置了超时等待,如果报相关time_out这些,可以把mysql.ini尾部添加ma ...

  6. DataTable 数据量大时,导致内存溢出的解决方案

    /// <summary> /// 分解数据表 /// </summary> /// <param name="originalTab">需要分 ...

  7. Thinkphp解决phpExcel导出数据量大导致内存溢出

    工作需要导出几万的数据量.操作比较频繁.之前数据在七八千是数据导出很慢.phpExcel是方便但是性能一般.现在改为使用csv导出数据:可以缓解内存压力,一次导出两三万是没问题的.当然服务器内存给力, ...

  8. MYSQL的大数据量情况下的分页查询优化

    最近做的项目需要实现一个分页查询功能,自己先看了别人写的方法: <!-- 查询 --> <select id="queryMonitorFolder" param ...

  9. 关于MySQL中查询大数据量的情况下分页limit的性能优化

    https://blog.csdn.net/weixin_37848710/article/details/80772725

随机推荐

  1. A - 最长上升子序列

    A - 最长上升子序列 Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem De ...

  2. Qt-Creator 加入qwt库

    qwt是基于Qt的开源图表库 从官网下载qwt的源码 http://sourceforge.jp/projects/sfnet_qwt/downloads/qwt/6.1.0/qwt-6.1.0.ta ...

  3. BZOJ3990 排序(sort)

    排序(sort) 题目描述 小A有一个1~2N的排列A[1..2N],他希望将数组A从小到大排序.小A可以执行的操作有N种,每种操作最多可以执行一次.对于所有的i(1<=i<=N),第i种 ...

  4. 用类加载器的5种方式读取.properties文件

    用类加载器的5中形式读取.properties文件(这个.properties文件一般放在src的下面) 用类加载器进行读取:这里采取先向大家讲读取类加载器的几种方法:然后写一个例子把几种方法融进去, ...

  5. html中<a href> </a>的用法

    一.绝对跳转    <a href="http://www.baidu.com/">百度</a> 二.相对跳转有如下方式,需要了解(以下的例子中,分别以你的 ...

  6. clips 前端 js 单选按钮与输入框 的配合变化

    情形1: 一对单选按钮 一个输入框组 输入框组随单选按钮的改变而替换文字或执行其它 片段属于 介绍单选框的基本使用方式  : 1.单选框是有分类的,每个单选框有自己所属的组 从而一个页面可以拥有多组单 ...

  7. Mysql大数据备份及恢复

    <p>[引自攀岩人生的博客]MySQL备份一般采取全库备份.日志备份;MySQL出现故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任意位置或时间;mysql的二进制日 ...

  8. 消耗战(bzoj 2286)

    Description 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战斗,我军 ...

  9. 【调试】如何使用javascript的debugger命令进行调试(重要)

    首先安装firebug,在firefox的扩展里搜索安装即可. 然后在页面中启用firebug中的脚本: 然后在网页某些位置加入debugger命令,比如如下页面代码: <!DOCTYPE ht ...

  10. VS MFC RADIO控件 选择

    我们假设有两个RADIO控件:IDC_RADIO_SINGLE和IDC_RADIO_RANGE,我们的目的是默认选种IDC_RADIO_SINGLE控件. 方法一: CheckRadioButton( ...