基本思路就是,知道总数之后分割成2万一个数组进行查询,最后独立写入csv,避免数据过大导致溢出
速度还不错,在php7下,机器I5 8G内存,128G,SSD,52W多条,大概也就10几秒,出来整个文件38.2M
laravel 写的demo 2018年6月19日18:13:26
set_time_limit(0); ini_set('memory_limit', '512M'); //获取总数 $count = DataChinaYearData::count(); //526672 $per = 20000; $section = array(); for ($i = 0; $i <= $count; $i += $per) { $section[] = $i; } if (end($section) < $count) { $section[] = $count; } //清理输出流的防止乱码 ob_flush(); flush(); $fp = fopen('file.csv', 'w'); foreach ($section as $k => $v) { $list = array(); $list = DataChinaYearData::offset($v)->limit($per)->get()->toArray(); foreach ($list as $fields) { fputcsv($fp, $fields); } unset($list); //防止溢出 ob_flush(); flush(); } fclose($fp);