PHP批量导出20万条数据解决消耗内存和时间问题

本文介绍了在PHP项目中遇到批量导出20万条以上数据到Excel时,如何解决导出时间过长和内存消耗过大问题。通过分批读取数据库、选择CSV格式存储以及生成压缩ZIP文件来优化。提供了实现该优化的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中使用php批量导出数据到Excel中,大量数据2w,5w,10w数据就要面临问题

1、导出时间变得很慢,少则1分钟,多则好几分钟,数据量一旦上来,还可能面临导不出来的困窘(这种导出效率正常人都会受不了,更何况是要求苛刻的用户)。

2、导出消耗大量的内存资源,即使把php内存使用设置为无限大,当多个用户同时使用导出功能导出大量数据的时候,服务器内存使用就会直线往上升,报警,甚至宕机,严重影响其他业务


需要注意EXCEL单表只能显示104W数据

解决思路大概是:

1、从数据库中读取要进行数据量分批读取,以防变量内存溢出

2、选择数据保存文件格式是csv文件,以方便导出之后的阅读、导入数据库等操作

3、以防不方便excel读取csv文件,需要104W之前就得把数据分割进行多个csv文件保存

4、多个csv文件输出给用户下载是不友好的,还需要把多个csv文件进行压缩,最后提供给一个ZIP格式的压缩包给用户下载就好。

直接上代码

<?php
/*
 *     
 * @param string $sql 需要导出的数据SQL
 * @param string $mark 生成文件的名字前缀
 * @param bool $is_multiple 是否要生成多个CSV文件
 * @param int $limit 每隔$limit行,刷新输出buffer,以及每个CSV文件行数限制
 *
 */
function putCsv($sql, $mark, $is_multi
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值