php实现百万级数据导出这里使用了服务器的缓存来实现php
实现:缓存
一:创建测试表,并加入测试数据服务器
1:建立测试表app
这里我建了一个test表,字段分别为:id,name,age,email框架
2:加入测试数据测试
(1)首先手动向表中添加若干行数据编码
而后执行以下命令批量添加数据.net
INSERT INTO test (name,age,email) SELECT name,age,email FROM test;
屡次执行上面的命令测试数据会呈指数增长,这样就能够获得不少测试数据excel
二:php实现导出百万级数据(这里个人查询命令使用的时Yii框架自带的查询命令)code
//让程序一直运行 set_time_limit(0); //设置程序运行内存 ini_set('memory_limit', '128M'); //导出文件名 $fileName = '测试导出数据'; header('Content-Encoding: UTF-8'); header("Content-type:application/vnd.ms-excel;charset=UTF-8"); header('Content-Disposition: attachment;filename="' . $fileName . '.csv"'); //打开php标准输出流 $fp = fopen('php://output', 'a'); //添加BOM头,以UTF8编码导出CSV文件,若是文件头未添加BOM头,打开会出现乱码。 fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF)); //添加导出标题 fputcsv($fp, ['姓名', '岁数', '邮箱']); $nums = 10000; //每次导出数量 $count = Test::find()->count(); $step = ceil($count/$nums);//循环次数 for($i = 0; $i < $step; $i++) { $result = Test::find() ->select(['name', 'age', 'email']) ->limit($nums) ->offset($i * $nums) ->asArray() ->all(); foreach ($result as $item) { fputcsv($fp, $item); } //每1万条数据就刷新缓冲区 ob_flush(); flush(); } exit;
如上测试后能够发现导出一百万左右数据只需十几秒左右时间,效率还算是不错的