mysql关于数据量大的时候分页分批处理
前几天遇到一个问题是,数据库一开始有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关于数据量大的时候分页分批处理的更多相关文章
- 分布式系统中我们会对一些数据量大的业务进行分拆,分布式系统中唯一主键ID的生成问题
分布式全局唯一ID生成策略 https://www.cnblogs.com/vandusty/p/11462585.html 一.背景 分布式系统中我们会对一些数据量大的业务进行分拆,如:用户表,订 ...
- 关于dedecms数据量大以后生成目录缓慢的问题解决
四月份的时候博客被封.我不知情.因为一直很忙,没有来得及看.前两天来看以后,发现居然被封,吓傻了我. 赶紧找原因,原来是转载了某个人的博文,被他举报了,然后就被封了. 觉得很伤心,毕竟这个博客陪伴了我 ...
- 使用POI导出EXCEL工具类并解决导出数据量大的问题
POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...
- 大数据量报表APPLET打印分页传输方案
1 . 问题概述 当报表运算完成时,客户端经常需要调用润乾自带的runqianReport4Applet.jar来完成打印操作, 然而数据量比较大的时候,会导致无法加载完成,直至applet内存 ...
- 解决mysql导入数据量很大导致失败及查找my.ini 位置(my.ini)在哪
数据库数据量很大的数据库导入到本地时,会等很久,然而等很久之后还是显示失败: 这是就要看看自己本地的没mysql是否设置了超时等待,如果报相关time_out这些,可以把mysql.ini尾部添加ma ...
- DataTable 数据量大时,导致内存溢出的解决方案
/// <summary> /// 分解数据表 /// </summary> /// <param name="originalTab">需要分 ...
- Thinkphp解决phpExcel导出数据量大导致内存溢出
工作需要导出几万的数据量.操作比较频繁.之前数据在七八千是数据导出很慢.phpExcel是方便但是性能一般.现在改为使用csv导出数据:可以缓解内存压力,一次导出两三万是没问题的.当然服务器内存给力, ...
- MYSQL的大数据量情况下的分页查询优化
最近做的项目需要实现一个分页查询功能,自己先看了别人写的方法: <!-- 查询 --> <select id="queryMonitorFolder" param ...
- 关于MySQL中查询大数据量的情况下分页limit的性能优化
https://blog.csdn.net/weixin_37848710/article/details/80772725
随机推荐
- web自动化测试:watir+minitest(五)
测试报告: 加载minitest-reporters库,并设置相关的参数.既可以在每次运行测试后生成响应的测试报告. 默认会生成一份html的报告在当前目录的test目录下 我们可以指定参数对报告的标 ...
- 简单的JS钟表计时
思路:先写出简单的数字计时,根据时分秒的数值转换成度数,使用CSS3的transform进行div倾斜. 知识点:transform可以对div进行倾斜或旋转等效果.但是根据浏览器不同代码也不同,本代 ...
- JAVA项目-嗖嗖移动
/** * 移动卡类 */ public class MobileCard { private String cardNumber; //卡号 private String userName; //用 ...
- bzoj1009 [HNOI2008] GT考试 矩阵乘法+dp+kmp
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4542 Solved: 2815[Submit][Statu ...
- 51nod 1851 俄罗斯方块
玩过俄罗斯方块?那你知道俄罗斯方块共有七种吧(其实只有五种) 给一个黑白图,每次能将某些区域的格子黑白反转,至于某些区域的意思嘛,就是俄罗斯方块形状的区域咯(可水平翻转.上下翻转.旋转) 求能否将图变 ...
- 洛谷 P1343 地震逃生
P1343地震逃生 题目描述 汶川地震发生时,四川**中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有n个点,m条边.1号点为教室,n号点为安全地带,每 ...
- 初学springMVC的拦截器
springMvc拦截器的执行顺序! 拦截器的各个方法的作用: /** * 登录验证拦截器 */ public class Intercepter implements HandlerInt ...
- WCF使用小例子
using System.Runtime.Serialization; using System.ServiceModel; using MySpace; using System.ServiceMo ...
- 树莓派3b入门教程
原文地址:传送门 这篇教程将带您一起玩转树莓派3(Raspberry Pi 3).和普通PC一样,拿到新设备第一件事就是要给它安装一个操作系统,并做一些初始化的操作.比PC简单的是,树莓派是一个固定配 ...
- JavaScript学习总结-技巧、实用函数、简洁方法、编程细节
整理JavaScript方面的一些技巧,比较实用的函数,常见功能实现方法,仅作参考 变量转换 var myVar = "3.14159", str = ""+ ...