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 相关文章推荐
PHP - Html Transfer Code
Oct 09 PHP
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 PHP
dede全站URL静态化改造[070414更正]
Apr 17 PHP
PHP实现定时生成HTML网站首页实例代码
Nov 20 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 PHP
PHP中$_SERVER的详细参数与说明介绍
Oct 26 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
php实现汉字验证码和算式验证码的方法
Mar 07 PHP
搭建自己的PHP MVC框架详解
Aug 16 PHP
PHP开发之用微信远程遥控服务器
Jan 25 PHP
PHP设计模式之单例模式原理与实现方法分析
Apr 25 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
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
PHP中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
showModelessDialog()使用详解
2006/09/07 Javascript
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
2010年最佳jQuery插件整理
2010/12/06 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
简单讲解jQuery中的子元素过滤选择器
2016/04/18 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
Python计算字符宽度的方法
2016/06/14 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
2016/06/30 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
Python 编程速成(推荐)
2019/04/15 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
QML用PathView实现轮播图
2020/06/03 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
2014年小学体育工作总结
2014/12/11 职场文书
学生保证书
2015/01/16 职场文书
义卖募捐活动总结
2015/05/09 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
能让Python提速超40倍的神器Cython详解
2021/06/24 Python