前言: 很多时候,因为数据统计,我们需要将数据库的数据导出到Excel等文件中,以供数据人员进行查看,如果数据集不大,其实很容易;但是如果对于大数集的导出,将要考虑各种性能的问题,这里以导出数据库一百万条数据为例,导出时间不过20秒,值的学习的一种大数据导出方式。
一、导出思路
需要考虑服务器内存
需要考虑程序运行的最大时间
缺少BOM头导致乱码的处理
如果导出数量过大,推荐使用循环导出,每次循环这里以导出一万条为例,循环100次即可全部导出
二、导出源码
下面源码将数据库信息修改成自己的即可使用
亲测导出一百万条数据,3个字段,不过20秒
如果服务器硬件不支持一次读取一万条数据,可将循环次数提高,导出数量降低
//让程序一直运行
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, ['姓名', '年龄', '地区']);
//链接数据库
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=db_www;charset=utf8";
$pdo = new PDO($dsn, 'root', '');
$step = 100; //循环次数
$nums = 10000; //每次导出数量
for($i = 0; $i < $step; $i++) {
$start = $i * 10000;
$sql = "SELECT uname,age,city FROM `hd_test` ORDER BY `id` LIMIT {$start},{$nums}";
$pdostatement = $pdo->query($sql);
$result = $pdostatement->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $item) {
fputcsv($fp, $item);
//每1万条数据就刷新缓冲区
ob_flush();
flush();
三、快速生成百万条测试数据
这里推荐数据库的蠕虫复制命令
先建好表后,插2条测试数据后,执行几次下列命令,即可指数增长
INSERT INTO hd_test (uname,age,city) SELECT uname,age,city FROM hd_test;
到此这篇关于PHP快速导出百万级数据到CSV或者EXCEL文件的文章就介绍到这了,更多相关PHP 导出百万级数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
php pdf首页截图,PHP_PHP中使用Imagick读取pdf并生成png缩略图实例,pdf生成png首页缩略图
PHP -- 七牛云 在线视频 获取某一帧作为封面图
PHP图片压缩方法
如何解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
php远程下载文章中图片并保存源文件名不变
详解PHP如何下载采集图片到本地(附代码实例)
php如何将webp格式图片转为jpeg
PHP获取远程图片的宽高和体积大小
php 软件版本号比较
使用PHP通过SMTP发送电邮
常用正则表达式
php如何用正则表达式匹配中文
用于分割字符串的 PHP preg_match_all 正则表达式
php.ini配置调优
PHP 几种常见超时的设置方法
PHP函数in_array、array_key_exists和isset效率分析
php array push 和array_merge 效率谁高,php 通过array_merge()和array+array合并数组的区别和效率比较...
php 两个数组取交集、并集、差集
设置PHP最大连接数及php-fpm 高并发 参数调整
php 获取代码执行时间和消耗的内存
PHP如何判断某项扩展是否开启
centos7.x下php 导出扩展 XLSXWriter 安装
php生成mysql数据库字典
PHP 实现 word/excel/ppt 转换为 PDF
composer的使用
showdoc sqlite3 找回管理员密码
php怎么将数组转为xml
PHP抖音最新视频提取代码
Yii2 如何获取Header参数?
swoole
Linux下搭建swoole服务的基本步骤
相关学习资料
带你学习swoole_process详解
按照官方文档 在win10下安装 docker for windows easyswoole镜像 挂载目录
php常用框架
Hyperf
常用算法PHP版
thinkphp6
TP6 事件绑定、监听、订阅
Thinkphp 模板中输出HTML的变量
Thinkphp6(操作SQL数据库)
thinkphp6 mysql查询语句对于为null和为空字符串给出特定值处理
Thinkphp 6 - 连接配置多个数据库并实现自由切换(详细过程及实例demo)
TP框架中的Db::name 和 dB::table 以及 db('') 的区别
thinkphp6.0模型篇之模型的软删除
thinkphp6自定义日志驱动,增加显示全部请求信息
微擎数据库字段字典
Flutter实现微信支付和iOS IAP支付
Flutter上线项目实战——苹果内购
PHP接入苹果支付
php如何获取当前脚本所有加载的文件
php跟踪所有调用方法,日志方法
解析phpstorm + xdebug 远程断点调试
PHP XDEBUG调试 PHPSTORM配置
PHP 出现 502 解决方案
php 语法解析错误 syntax error unexpected namespace T_NAMESPACE
Composer 安装与使用
数据库相关
php pdo怎么设置utf8
php 如何根据最新聊天对用户进行排序
php lic&fpm
让php程序在linux后台执行
PHPcli模式和fpm模式优缺点在哪里?
php运行模式之cli模式
php批量获取所有公众号粉丝openid
php 判断点在多边形内,php百度地图api判断地址是否在多边形区域内
PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询
MySQL 根据经纬度查找排序
PHP+MySQL获取坐标范围内的数据
【百度地图】删除指定覆盖物
百度地图多点+画连接线+数字标注
laravel5.8
laravel5.8(四)引入自定义常量文件及公共函数文件
Lumen 查询执行SQL
使你的 Laravel 项目模块化
Laravel 多条件 AND , OR条件组合查询
Laravel 查询 多个or或者and条件
laravel redis操作大全
laravel中外部定义whereIn的用法和where中使用in
lumen5.8
创建laravel5.8 lumen前后台api项目--记录请求和响应日志
Laravel和Lumen开启SQL日志记录
Laravel 5.8 常用操作(路径+日志+分页+其他操作)
升级php7.4 laravel lumen报错Trying to access array offset on value of type null
Laravel 任务调度(计划任务,定时任务)
laravel的command定时任务时间的设置
Laravel任务调度的简单使用
laravel单数据库执行事务和多数据库执行事务
laravel中锁以及事务的简单使用
申请其他相关
小程序地理位置接口申请
PHP高并发
php 高并发下 秒杀处理思路
记录 PHP高并发 商品秒杀 问题的 Redis解决方案
thinkphp3.2
thinkphp3.2 数据库 AND OR连缀使用
laravel
laravel的联表查询with方法的使用
laravel获取请求路由对应的控制器和方法
Laravel 模型关联建立与查询
Laravel多表(3张表以上)with[]关联查询,对关联的模型做条件查询(has,跟join一样结果 )
Laravel模型属性的隐藏属性、显示属性和临时暴露隐藏属性用法介绍
aravel获取当前的url以及当前的基础域名方法汇总
Laravel 模型实现多库查询或者多表映射
关于 Laravel 的 with 多表查询问题
Laravel 模型过滤(Filter)设计
懒加载、预加载、with()、load() 傻傻分不清楚?
laravel模型$castsl属性
Laravel Query Builder 复杂查询案例:子查询实现分区查询 partition by
Laravel 模型关联、关联查询、预加载使用实例
laravel 中with关联查询限定查询字段
laravel 原生字段查询 whereRaw 和 where(DB::raw(''))
lavarel - where条件分组查询(orWhere)
通过 Laravel 查询构建器实现复杂的查询语句
两个结果集合并成一个
Laravel 对某一列进行筛选然后求和 sum()
laravel怎么优雅的拼接where,处理whereIn与where数组查询的问题
laravel查询时判断是否存在数据
laravel中的whereNull和whereNotNull
laravel框架中的子查询
Laravel框架中 orwhere 多条件查询的使用
Laravel中where的高级使用方法
laravel复杂的数据库查询(事例)
laravel多条件查询方法(and,or嵌套查询)
Laravel 的 where or 查询
Laravel 进行where 多个or和and的条件查询可用
mysql
mysql联合索引(复合索引)详解
MYSQL 清空表和截断表
MySQL快速生成大量测试数据(100万、1000万、1亿)
提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
MySQL常用命令
MySQL(三)|《千万级大数据查询优化》第一篇:创建高性能的索引
MySQL(一)|性能分析方法、SQL性能优化和MySQL内部配置优化
MySQL(二)|深入理解MySQL的四种隔离级别及加锁实现原理
MySQL(四)|《千万级大数据查询优化》第一篇:创建高性能的索引(补充)
MySQL(五)|《千万级大数据查询优化》第二篇:查询性能优化(1)
MySQL(六)|《千万级大数据查询优化》第二篇:查询性能优化(2)
MySQL(七)|MySQL分库分表的那点事
Mysql索引优化 Mysql通过索引提升查询效率(第二棒)
MySQL查询的性能优化(查询缓存、排序跟索引)
【总结】MySQL数据库
MySQL存储引擎、事务日志并发访问以及隔离级别
数据库 SQL查询重复记录 方法
替换数据库中某个字段中的部分字符
mysql开启bin log 并查看bin log日志(linux)
千万级别数据的mysql数据表优化
MYSQL百万级数据,如何优化
MySQL备份和恢复
MySQL间隙锁死锁问题
MySQL中sql_mode参数
mysql数据库异常
this is incompatible with sql_mode=only_full_group_by
mysql安全
MySQL数据库被比特币勒索及安全调整
MongoDB
sql查询
MYSQL按时间段分组查询当天,每小时,15分钟数据分组
基于 MySQL + Tablestore 分层存储架构的大规模订单系统实践-架构篇
数据库安全
服务器被黑,MySQL 数据库遭比特币勒索!该如何恢复?
数千台MySQL数据库遭黑客比特币勒索,该怎么破?
MySQL 数据库规范
MySQL数据库开发的36条铁律
Elasticsearch
安装与配置
ElasticSearch关闭重启命令
设置ES默认分词器IK analyzer
elasticsearch 模糊查询不分词,实现 mysql like
elasticSearch多条件高级检索语句,包含多个must、must_not、should嵌套示例,并考虑nested对象的特殊检索
elasticSearch按字段普通检索,结果高亮
Elasticsearch 如何实现查询/聚合不区分大小写?
索引更新&刷新
refresh与批量操作的效率
Elasticsearch 删除type
ElasticSearch最全分词器比较及使用方法
解决ES因内存不足而无法查询的错误,Data too large, data for [<http_request>]
linux
CentOS7.5 通过wget下载文件到指定目录
【CentOS】vi命令
centos7查看硬盘使用情况
CentOS7 查看目录大小
Centos 7下查看当前目录大小及文件个数
普通用户sudo\su 到root免密码
普通用户切换到root用户下的免密配置方法
linux 获取进程启动参数,linux查看进程启动及运行时间
Linux 查看进程
linux删除文件后不释放磁盘的问题
Linux查找大文件命令
linux 如何关闭正在执行的php脚本
linux三剑客(grep、sed、awk)基本使用
centos 卸载软件
centos查看内存、cpu占用、占用前10,前X
Centos 查看系统状态
问题解决:Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist:...
php相关
centos 安装phpize
Centos7.2下phpize安装php扩展
资深Linux运维工程师常用的10款软件/工具介绍
一款良心的终端连接工具
六款Linux常用远程连接工具介绍,看看哪一款最适合你
Finalshell
Linux Finalshell连接centos7和文件无显示问题
WSL2:我在原生的Win10玩转Linux系统
MobaXterm
linux服务器上定时自动备份数据库,并保留最新5天的数据
Centos系统开启及关闭端口
CentOS7开放和关闭端口命令
Linux中查看所有正在运行的进程
防火墙firewall-cmd命令详解
centos 7.8阿里云服务器挂载 数据盘
Linux Finalshell连接centos7和文件无显示问题
Centos7系统端口被占用问题的解决方法
如何在Vim/Vi中复制,剪切和粘贴
[Linux kill进程] kill 进程pid的使用详解
Linux的几种备份、恢复系统方式
Linux系统全盘备份方法
相关软件安装
linux下 lua安装
python
升级pip之后出现sys.stderr.write(f“ERROR: {exc}“)
centos源码部署lua-5.3
deepin
deepin20.6设置默认的root密码
宝塔定时任务按秒执行
CentOS 7 定时任务 crontab 入门
centos7定时任务crontab
Linux下定时任务的查看及取消
Linux(CentOS7)定时执行任务Crond详细说明
Linux 查看所有定时任务
linux查看所有用户定时任务
Linux 定时任务(超详细)
Centos7开启防火墙及特定端口
CentOS防火墙操作:开启端口、开启、关闭、配置
生成 SSH 密钥(windows+liunx)
阿里云,挂载云盘
layui
layui多文件上传
layer.msg()弹框,弹框后继续运行
radio取值
layui-数据表格排序
Layui select选择框添加搜索选项功能
保持原来样式
layui表格单元如何自动换行
layui-laydate时间日历控件使用方法详解
layui定时刷新数据表格
layer 延时设置
layer.open 回调函数
【Layui内置方法】layer.msg延时关闭msg对话框(代码案例)
layui多图上传图片顺序错乱及重复上传解决
layer.confirm关闭弹窗
Vue跨域解决方法
vue 4.xx.xx版本降级至2.9.6
vue-cli 2.x升级到3.x版本, 和3.x降级到2.x版本命令
最新版Vue或者指定版本
Vue2.6.11按需模块安装配置
jQuery
jQuery在页面加载时动态修改图片尺寸的方法
jquery操作select(取值,设置选中)
FullCalendar中文文档:Event日程事件
JS 之 重定向
javascript截取video视频第一帧作为封面方案
HTML <video> preload 属性
jQuery使用ajax提交post数据
JS截取视频靓丽的帧作为封面
H5案例分享:移动端touch事件判断滑屏手势的方向
JS快速获取图片宽高的方法
Windows环境下curl的使用
Cygwin
Windows下安装Cygwin及apt-cyg
Cygwin 安装、CMake 安装
mklink命令 详细使用
Nginx
Nginx高级篇-性能优化
Nginx常用命令(Linux)
linux+docker+nginx如何配置环境并配置域名访问
Nginx的启动(start),停止(stop)命令
linux 查看nginx 安装路径
Linux 查看 nginx 安装目录和配置文件路径
【NGINX入门】3.Nginx的缓存服务器proxy_cache配置
thinkphp6.0 伪静态失效404(win下)
nginx rewrite及多upstream
Nginx负载均衡(upstream)
耦合?依赖?耦合和依赖的关系?耦合就是依赖
PHP常用六大设计模式
分布式与集群
Nginx 实践案例:反向代理单台web;反向代理多组web并实现负载均衡
Docker
30 分钟快速入门 Docker 教程
linux查看正在运行的容器,说说Docker 容器常用命令
Windows 安装Docker至D盘
win10 快速搭建 lnmp+swoole 环境 ,部署laravel6 与 swoole框架laravel-s项目1
win10 快速搭建 lnmp+swoole 环境 ,部署laravel6 与 swoole框架laravel-s项目2
docker 容器重命名
Linux docker常用命令
docker 搭建php 开发环境 添加扩展redis、swoole、xdebug
docker 单机部署redis集群
Docker 退出容器不停止容器运行 并重新进入正在运行的容器
进入退出docker容器
Docker的容器设置随Docker的启动而启动
使用异常处理
docker容器中bash: vi: command not found
OCI runtime exec failed: exec failed:解决方法
docker启动容器慢,很慢,特别慢的坑
解决windows docker开发thinkphp6启动慢的问题
【Windows Docker】docker挂载解决IO速度慢的问题
Docker的网络配置,导致Docker使用网路很慢的问题及解决办法
golang工程部署到docker容器
Docker 容器设置自启动
如何优雅地删除Docker镜像和容器(超详细)
5 个好用的 Docker 图形化管理工具
Docker 可能会用到的命令
Kubernetes
RabbitMQ
php7.3安装使用rabbitMq
Windows环境PHP如何使用RabbitMQ
RabbitMQ学习笔记:4369、5672、15672、25672默认端口号修改
Window10 系统 RabbitMQ的安装和简单使用
RabbitMQ默认端口
RabbitMQ可视化界面登录不了解决方案
RocketMQ
Kafka
ActiveMQ
phpMQTT详解以及处理使用过程中内存耗死问题
MQTT--物联网(IoT)消息推送协议
php实现mqtt发布/发送 消息到主题
Mqtt.js 的WSS链接
如何在 PHP 项目中使用 MQTT
emqx 修改dashboard 密码
Windows 系统中单机最大TCP的连接数详解
Linux系统EMQX设置开机自启
Centos7 EMQX部署
docker安装 EMQX 免费版 docker安装并配置持久化到服务器
网易云音乐基于 Flink + Kafka 的实时数仓建设实践
实时数仓-基于Flink1.11的SQL构建实时数仓探索实践
网站如何保护用户的密码
关于web项目sessionID欺骗的问题
php的sessionid可以伪造,不要用来做防刷新处理了
DVWA-Weak Session IDs (弱会话)漏洞利用方式
保证接口数据安全的10种方案
cookie和session的窃取
万能密码漏洞
黑客如何快速查找网站后台地址方法整理
网站后台万能密码/10大常用弱口令
万能密码漏洞02
大多数网站后台管理的几个常见的安全问题注意防范
token可以被窃取吗_盗取token
token被劫持[token被劫持如何保证接口安全性]
PHP给后台管理系统加安全防护机制的一些方案
php - 重新生成 session ID
隐藏响应中的server和X-Powered-By
PHP会话控制之如何正确设置session_name
Session攻击001
PHP防SQL注入代码,PHP 预防CSRF、XSS、SQL注入攻击
php25个安全实践
php架构师 系统管理员必须知道的PHP安全实践
Linux服务器关联Git,通过执行更新脚本实现代码同步
PHP通过exec执行git pull
git 在linux部署并从windows上提交代码到linux
git上传到linux服务器,git一键部署代码到远程服务器(linux)
linux更新git命令,使用Linux定时脚本更新服务器的git代码
git異常
如何解决remote: The project you were looking for could not be found
git status显示大量文件修改的原因是什么
PHPstorm批量修改文件换行符CRLF为LF
git使用
git常用命令大全
centos git保存账户密码
GIT 常用命令
git怎样还原修改
Git 如何放弃所有本地修改的方法
Git忽略文件模式改变
git: 放弃所有本地修改
Git三种方法从远程仓库拉取指定的某一个分支
H5浏览器支持播放格式:H264 AVCA的MP4格式,不能转换为mpeg-4格式,
iOS无法播放MP4视频文件的解决方案 mp4视频iphone播放不了怎么办
h5点播播放mp4视频遇到的坑,ios的h5不能播放视频等
【Linux 并发请求数】支持多少并发请求数
Linux下Apache服务器并发优化
redis
Linux启动PHP的多进程任务与守护redis队列
重启redis命令
golang