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代码
Mar 08 PHP
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
mysql 全文搜索 技巧
Apr 27 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
May 02 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
Feb 13 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
thinkphp autoload 命名空间自定义 namespace
Jul 17 PHP
PHP常用的排序和查找算法
Aug 06 PHP
百度地图API使用方法详解
Aug 25 PHP
php实现Mysql简易操作类
Oct 11 PHP
PHP实现的随机IP函数【国内IP段】
Jul 20 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
探讨fckeditor在Php中的配置详解
2013/06/08 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
js 判断脚本加载完毕的代码
2011/07/13 Javascript
js window.open弹出新的网页窗口
2014/01/16 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
Angularjs上传图片实例详解
2017/08/06 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
vue props对象validator自定义函数实例
2019/11/13 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
python实现随机梯度下降(SGD)
2020/03/24 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
2019/01/29 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
Python字典底层实现原理详解
2019/12/18 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
我的大学生活职业生涯规划
2014/01/02 职场文书
高二美术教学反思
2014/01/14 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
材料员岗位职责范本
2015/04/11 职场文书
入党介绍人意见范文
2015/06/01 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL
你知道Java Spring的两种事务吗
2022/03/16 Java/Android
React四级菜单的实现
2022/04/08 Javascript