前几天遇到一个问题是,数据库一开始有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. 【bzoj1565】[NOI2009]植物大战僵尸 拓扑排序+最大权闭合图

    原文地址:http://www.cnblogs.com/GXZlegend/p/6808268.html 题目描述 输入 输出 仅包含一个整数,表示可以获得的最大能源收入.注意,你也可以选择不进行任何 ...

  2. Spring框架jar包分类(转)

    转自:http://www.cnblogs.com/JSONBEAN/p/6364038.html 长期以来都在写SSM框架的项目,却未能深入理解框架的搭建原理,而只是浅薄的理解前辈的架构,然后不断套 ...

  3. hdu 2544 最短路 (最短路径)

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  4. [hdu6428]Problem C. Calculate

    题目大意:有$T(1\leqslant T\leqslant 10)$组数据,每组数据给你$A,B,C(0<A,B,C\leqslant 10^7)$,求$\sum\limits_{i=1}^A ...

  5. 洛谷 P4883 mzf的考验 解题报告

    P4883 mzf的考验 题目背景 \(mzf\)立志要成为一个豪杰,当然,他也是一个\(OIer\). 他希望自己除了会\(OI\)之外还会各种东西,比如心理学.吉他.把妹等等. 为了让自己有更大的 ...

  6. codechef AUG17 T1 Chef and Rainbow Array

    Chef and Rainbow Array Problem Code: RAINBOWA Chef likes all arrays equally. But he likes some array ...

  7. css3文件树

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. error LNK2026: 模块对于 SAFESEH 映像是不安全的(转)

    原文转自 http://www.cnblogs.com/hanxi/archive/2012/06/10/2544230.html 今天使用VS2012遇到一个问题:"链接器工具错误 LNK ...

  9. STM in Haskell

    Software Transactional Memory,软件事务内存管理(应该是这么翻译的吧T_T) 类似于数据库的事务,所有的操作都有log,最后验证其他线程是否对数据进行修改,要是有那么就回滚 ...

  10. MATLAB7 + sqlitejdbc-v056.jar 访问数据库

    以下代码出错: conn=database('data.db','','','org.sqlite.JDBC','jdbc:sqlite:C:/MATLAB7/work/del_man_voice_f ...