PHP大批量插入数据库的3种方法和速度对比


Posted in PHP onJuly 08, 2014

第一种方法:使用insert into 插入,代码如下:

$params = array(‘value'=>'50′);
set_time_limit(0);
echo date(“H:i:s”);
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
};
echo date(“H:i:s”);

最后显示为:23:25:05 01:32:05 也就是花了2个小时多!

第二种方法:使用事务提交,批量插入数据库(每隔10W条提交下)最后显示消耗的时间为:22:56:13 23:04:00 ,一共8分13秒  ,代码如下:

echo date(“H:i:s”);
$connect_mysql->query(‘BEGIN');
$params = array(‘value'=>'50′);
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
if($i%100000==0){
$connect_mysql->query(‘COMMIT');
$connect_mysql->query(‘BEGIN');
}
}
$connect_mysql->query(‘COMMIT');
echo date(“H:i:s”);

第三种方法:使用优化SQL语句:将SQL语句进行拼接,使用 insert into table () values  (),(),(),()然后再一次性插入,如果字符串太长,

则需要配置下MYSQL,在mysql 命令行中运行 :set global max_allowed_packet =  2*1024*1024*10;消耗时间为:11:24:06 11:25:06;

插入200W条测试数据仅仅用了1分钟!代码如下:

$sql= “insert into twenty_million (value) values”;
for($i=0;$i<2000000;$i++){
$sql.=”('50′),”;
};
$sql = substr($sql,0,strlen($sql)-1);
$connect_mysql->query($sql);

最后总结下,在插入大批量数据时,第一种方法无疑是最差劲的,而第二种方法在实际应用中就比较广泛,第三种方法在插入测试数据或者其他低要求时比较合适,速度确实快。

PHP 相关文章推荐
用Socket发送电子邮件(利用需要验证的SMTP服务器)
Oct 09 PHP
PHP+AJAX实现无刷新注册(带用户名实时检测)
Dec 02 PHP
php对gzip文件或者字符串解压实例参考
Jul 25 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
PHP查询MySQL大量数据的时候内存占用分析
Jul 22 PHP
Zend Studio 实用快捷键一览表(精心整理)
Aug 10 PHP
php构造函数实例讲解
Nov 13 PHP
php使用pack处理二进制文件的方法
Jul 03 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
PHP7标量类型declare用法实例分析
Sep 26 PHP
php获取当前月与上个月月初及月末时间戳的方法
Dec 05 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
php发送get、post请求的6种方法简明总结
Jul 08 #PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
Jul 08 #PHP
微信公众平台天气预报功能开发
Jul 06 #PHP
最常用的8款PHP调试工具
Jul 06 #PHP
一个不易被发现的PHP后门代码解析
Jul 05 #PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 #PHP
php操作redis中的hash和zset类型数据的方法和代码例子
Jul 05 #PHP
You might like
PHP 函数学习简单小结
2010/07/08 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
Python下singleton模式的实现方法
2014/07/16 Python
python之yield表达式学习
2014/09/02 Python
Python多线程编程(一):threading模块综述
2015/04/05 Python
Python实现程序的单一实例用法分析
2015/06/03 Python
python实现图片彩色转化为素描
2019/01/15 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
python cookie反爬处理的实现
2020/11/01 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
Java编程面试题
2016/04/04 面试题
副总经理岗位职责
2014/03/16 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
英语课前三分钟演讲稿(6篇)
2014/09/13 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
党支部承诺书
2015/01/20 职场文书
退货证明模板
2015/06/23 职场文书
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android