php实现百万级数据导出这里应用了服务器的缓存来实现

实现:

一:建设测试表,并退出测试数据

1:创立测试表

这里我建了一个test表,字段别离为:id,name,age,email

2:退出测试数据

(1)首先手动向表中增加若干行数据

而后执行如下命令批量增加数据

INSERT INTO test (name,age,email) SELECT name,age,email FROM test;

屡次执行下面的命令测试数据会呈指数减少,这样就能够失去很多测试数据

二:php实现导出百万级数据(这里我的查问命令应用的时Yii框架自带的查问命令)

//让程序始终运行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;

如上测试后能够发现导出一百万左右数据只需十几秒左右工夫,效率还算是不错的

参考:https://blog.csdn.net/weixin_...