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读取30天之内的根据算法排序的代码
Apr 06 PHP
PHP教程 基本语法
Oct 23 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
PHP实现多条件查询实例代码
Jul 17 PHP
解析thinkphp import 文件内容变量失效的问题
Jun 20 PHP
三种php连接access数据库方法
Nov 11 PHP
PHP中使用正则表达式提取中文实现笔记
Jan 20 PHP
php生成gif动画的方法
Nov 05 PHP
PHP下载文件的函数实例代码
May 18 PHP
php基于openssl的rsa加密解密示例
Jul 11 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
PHP 7.4中使用预加载的方法详解
Jul 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
php去除重复字的实现代码
2011/09/16 PHP
phpmail类发送邮件函数代码
2012/02/20 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
javascript开发技术大全-第3章 js数据类型
2011/07/03 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
2015/07/17 Javascript
通过javascript进行UTF-8编码的实现方法
2016/06/27 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
在Python中处理时间之clock()方法的使用
2015/05/22 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
python实现剪切功能
2019/01/23 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
django实现用户注册实例讲解
2019/10/30 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
Python3爬虫中pyspider的安装步骤
2020/07/29 Python
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
大学生四个方面的自我评价
2013/09/19 职场文书
物流专业大学应届生求职信
2013/11/03 职场文书
2014自荐信的写作技巧
2014/01/28 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
抗震救灾标语
2014/06/26 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
学校政风行风整改方案
2014/10/25 职场文书
交通事故起诉书
2015/05/19 职场文书