php导入大量数据到mysql性能优化技巧


Posted in PHP onDecember 29, 2014

本文实例讲述了php导入大量数据到mysql性能优化技巧。分享给大家供大家参考。具体分析如下:

在mysql中我们结合php把一些文件导入到mysql中,这里就来分享一下我对15000条记录进行导入时分析与优化,需要的朋友可以参考一下.

之前有几篇文章,说了最近tiandi在帮朋友做一个小项目,用于统计电话号码的,每次按需求从数据库里随机生成打包的电话号码,然后不停地让人打这些电话号码推销产品(小小鄙视一下这样的行为)。但是朋友要求帮忙,咱也不能不帮啊,是吧。程序两个星期前已经做好,测试完毕交工。前几天朋友来电说,每天导入电话号码的时间越来越长,有时候一万条记录就要半个小时以上,看看能不能想办法提高一下这个速度。

我理了一下思路,数据库结构很简单,可以认为就两个字段,一个字段存电话号码,另一字段存类别,类别分别为c,d,e等等,分别代表已经拨通过此电话,未拨通过此电话,未拨打过此电话等等状态,而整个程序逻辑是这样的.

■拿到一个txt文件,里面存的是电话号码

■通过程序将txt文件导入到mysql里

■导入的时候,检测txt里的电话号码是否和mysql里的重复,如果不重复,直接插入新记录,如果重复,就需要按照判断电话号码所属类别来进行更新。

由于每个txt里的电话号码导入时,都需要做一次比较,所以程序肯定会耗时一些,这里我们先撇开这个原因,因为本文章的标题是优化写入速度,那么程序什么时候会写入记录呢?通过上面的逻辑得知,在匹配数据库时,没有发现存在记录时会发生写入数据库操作(当然update也算,只是这里只讨论insert),那么将上述逻辑转化为代码,差不多如下:

//$array为txt文件explode出来的数组,每一个为一个电话号码, $str为类型 

for($i=0; $i<count($array); $i++)  

{  

        $tmpstr = "'". $array[$i] ."','". $str ."'"; 

        $sql="INSERT INTO ".$usertable." (tel,type) VALUES (".$tmpstr.")"; 

        mysql_query($sql); 

}

以上代码完全正确,但是效率低下,当txt文件里包含了上万个电话号码时,即会有上万次的插入数据库操作,虽然每次的数据库写入操作都是很快的,但是上万条累计下来,这个执行时间不容忽视,tiandi简单的测试了一下插入15000万条记录,耗时差不多5分钟,如果再加上之前的逻辑判断等等过程,那么半个小时还真得不算少了,这样可不行,必须减少数据库库写入次数才对,于是上面代码变更为以下:
$sql2="INSERT INTO ".$usertable." (tel,type,updatetime) VALUES"; 

for($i=0; $i<count($array); $i++)  

{  

        $tmpstr = "'". $array[$i] ."','". $str ."'"; 

 $sql2 .= "(".$tmpstr."),"; 

} 

$sql2 = substr($sql2,0,-1);   //去除最后的逗号 

mysql_query($sql2);

这样,整个写入操作只有1次,大大地缩短了执行时间,差不多10秒就搞定了15000条记录,好了,本文到此结束,如果你也遇上写入大量数据到mysql耗时长的问题时,不如试试本文的优化方式.

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP4中session登录页面的应用
Jul 25 PHP
PHP新手入门学习方法
May 08 PHP
PHP学习散记_编码(json_encode 中文不显示)
Nov 10 PHP
PHP中去掉字符串首尾空格的方法
May 19 PHP
如何用php获取文件名后缀
Jun 09 PHP
限制ckeditor上传图片文件大小的方法
Nov 15 PHP
PHP动态输出JavaScript代码实例
Feb 12 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
Apr 03 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
Jan 07 PHP
PHP实现多级分类生成树的方法示例
Feb 07 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 PHP
PHP实现与java 通信的插件使用教程
Aug 11 PHP
推荐几个开源的微信开发项目
Dec 28 #PHP
dedecms集成财付通支付接口
Dec 28 #PHP
VPS中使用LNMP安装WordPress教程
Dec 28 #PHP
php随机取mysql记录方法小结
Dec 27 #PHP
php使用PDO方法详解
Dec 27 #PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 #PHP
php将图片保存入mysql数据库失败的解决方法
Dec 27 #PHP
You might like
微信支付开发维权通知实例
2016/07/12 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
基于jQuery的js分页代码
2010/06/10 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
sea.js常用的api简易文档
2016/11/15 Javascript
微信小程序 详解Page中data数据操作和函数调用
2017/01/12 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
浅析Python 多行匹配模式
2020/07/24 Python
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
linux面试题参考答案(2)
2015/12/06 面试题
全陪导游欢迎词
2014/01/17 职场文书
应届毕业生通用的自荐书范文
2014/02/07 职场文书
感恩小明星事迹材料
2014/05/23 职场文书
党支部先进事迹材料
2014/12/24 职场文书
投标邀请书范本
2015/02/02 职场文书
毕业论文致谢范文
2015/05/14 职场文书
工作时间证明
2015/06/15 职场文书
婚宴致辞
2015/07/28 职场文书
800字作文之大雪
2019/12/04 职场文书
MySQL数字类型自增的坑
2021/05/07 MySQL
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server