前几天遇到一个问题是,数据库一开始有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. 201621123034 《Java程序设计》第12周学习总结

    作业12-流与文件 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车 ...

  2. 轻松精通awk数组企业问题案例

    考试题1:处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题) oldboy.log http://www.etiantian.org/index.html http:// ...

  3. nio的reactor模式

    转自:http://blog.csdn.net/it_man/article/details/38417761 线程状态转换图 就是非阻塞IO 采用多路分发方式举个例子吧,你服务器做一个聊天室,按照以 ...

  4. eclipse安装使用jetty

    安装: 直接从eclipse中的eclipse_market中下载即可,关键说下配置项目的访问路径:

  5. Reinstall msdtc on Windows

    Reinstall MSDTC The system reported an unexpected error condition. You can resolve this condition by ...

  6. Android应用开发EditText文本内容变化监听方法

    import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android. ...

  7. 2016-2017 ACM-ICPC, Egyptian Collegiate Programming Contest(solved 8/11)

    这套题似乎是省选前做的,一直没来写题解---补上补上>_< 链接:http://codeforces.com/gym/101147 一样先放上惨不忍睹的成绩好了--- Problem A ...

  8. 【Git】Git SSH Key 生成步骤

    Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置. github的SSH配置如下: 一 . 设置Git的user name和email: $ git ...

  9. Android控件介绍

    1. 介绍 Android控件大多位于android.widget, android.view.View为他们的父类对于Dialog系列, android.app.Dialog为父类 Android的 ...

  10. hdu 5084(矩阵操作)

    HeHe Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...