php實現百萬級數據快速導出CSV

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;

如上測試後能夠發現導出一百萬左右數據只需十幾秒左右時間,效率還算是不錯的

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

相關文章
相關標籤/搜索