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 相关文章推荐
动态网站web开发 PHP、ASP还是ASP.NET
Oct 09 PHP
PHP 危险函数解释 分析
Apr 22 PHP
解析coreseek for sphinx的使用
Jun 21 PHP
深入php中var_dump方法的使用详解
Jun 24 PHP
phpmyadmin config.inc.php配置示例
Aug 27 PHP
php函数间的参数传递(值传递/引用传递)
Sep 23 PHP
php文件上传的简单实例
Oct 19 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
PHP中isset与array_key_exists的区别实例分析
Jun 02 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
php7连接MySQL实现简易查询程序的方法
Oct 13 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多层数组与对象的转换实例代码
2013/08/05 PHP
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
smarty简单应用实例
2015/11/03 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
javascript中关于类型判断的一些疑惑小结
2018/10/14 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
[04:01]2014DOTA2国际邀请赛 TITAN告别Ohaiyo期望明年再战
2014/07/15 DOTA
pandas对指定列进行填充的方法
2018/04/11 Python
Python3爬虫学习入门教程
2018/12/11 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
python实现简易淘宝购物
2019/11/22 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
Myprotein俄罗斯官网:欧洲第一运动营养品牌
2019/05/05 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
运动会入场词100字
2014/02/06 职场文书
药学职务聘任书
2014/03/29 职场文书
计算机科学技术自荐信
2014/06/12 职场文书
关于旅游的活动方案
2014/08/15 职场文书
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
浅谈Python数学建模之整数规划
2021/06/23 Python
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android