mysql关于数据量大的时候分页分批处理
2017-05-24 16:00
274 查看
前几天遇到一个问题是,数据库一开始有24W是信息,需要取出来,进行下载到excel中。一开始遇到的问题是,excel表格行只有65535条行数,远远不够,有人说了很多其他解决方式,为了快速开发我就直接使用了导出txt文本文件的方式,解决了筛选数据的问题。但是第二天,由于XXXXX活动增量很快,一下子就到了50W左右,之前写的程序莫名其妙的不可以使用了,老是报500的错误,后来按照别人讲的,进行分批次处理,其实就是分页的原理。
下面是代码:
其中mysqli_query语句都被微擎封装过了,可以不用注重具体的语法,看思路。
下面是代码:
其中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保留的时候的操作
- mysql中char(n)和varchar(n)在数据存入的时候关于是否丢弃最后的空格的区别
- (转)关于MYSQL数据的导出导入与版本的转换
- 关于MYSQL数据的导出导入与版本的转换
- mysql多表join时候update更新数据的方法
- 关于MySql插入数据的乱码问题
- PHP查询MySQL大量数据的时候内存占用分析
- 关于mysql数据的导出(http://blog.csdn.net/davidullua/services/trackbacks/21982.aspx )
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- MySQL:MySQL日期数据范例、MySQL时候范例利用总结
- 关于float double的数据类型的细节,在处理转换问题的时候非常有用
- 关于mysql版本升级后,原有的数据无法访问的解决方法,mysql错误代码:1558
- 关于数据绑定的时候判断Repeater中数据改变其整行颜色
- mysql limit查询优化(数据量大的时候很优)
- 关于MySQL数据量增加变化不大时,一种分页的优化方案
- mysql多表join时候update更新数据的方法
- Mysql:关于数据库数据读写的乱码问题
- ms sql到mysql的移植:关于数据类型移植的一些问题
- 关于Mysql数据默认编码的查看和修改
- 关于数据表映射在更新时候出现的一些问题