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 相关文章推荐
详细介绍:Apache+PHP+MySQL配置攻略
Sep 05 PHP
谈谈PHP语法(4)
Oct 09 PHP
介绍php设计模式中的工厂模式
Jun 12 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
Jun 18 PHP
php获取目标函数执行时间示例
Mar 04 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
PHP+Apache+Mysql环境搭建教程
Aug 01 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
Mar 31 PHP
php无限级分类实现评论及回复功能
Feb 18 PHP
TP5.0框架实现无限极回复功能的方法分析
May 04 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
为了这两部电子管收音机,买了6套全新电子管和10粒刻度盘灯泡
2021/03/02 无线电
自己动手做一个SQL解释器
2006/10/09 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
插件:检测javascript的内存泄漏
2007/03/04 Javascript
JavaScript 无符号右移运算符
2009/04/17 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
Python中zip()函数用法实例教程
2014/07/31 Python
使用python实现tcp自动重连
2017/07/02 Python
Python定时任务sched模块用法示例
2018/07/16 Python
pybind11在Windows下的使用教程
2019/07/04 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
2019/08/12 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
python实现发送带附件的邮件代码分享
2020/09/22 Python
python 绘制国旗的示例
2020/09/27 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
物业工作计划书
2014/01/10 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
专项法律服务方案
2014/06/11 职场文书
销售合作意向书范本
2015/05/08 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书