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 相关文章推荐
require(),include(),require_once()和include_once()区别
Mar 27 PHP
收藏的PHP常用函数 推荐收藏保存
Feb 21 PHP
php 对输入信息的进行安全过滤的函数代码
Jun 29 PHP
解析mysql left( right ) join使用on与where筛选的差异
Jun 18 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
php将csv文件导入到mysql数据库的方法
Dec 24 PHP
php简单获取文件扩展名的方法
Mar 24 PHP
PHP编程入门的基本语法知识点总结
Jan 26 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
win10下 php安装seaslog扩展的详细步骤
Dec 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
PHP 文章中的远程图片采集到本地的代码
2009/07/30 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
关于jquery css的使用介绍
2013/04/18 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
jQuery实现向下滑出的二级菜单效果实例
2015/08/22 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
this.$toast() 了解一下?
2019/04/18 Javascript
ES6中字符串的使用方法扩展
2019/06/04 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
[41:17]VG vs Optic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python监控网卡流量并使用graphite绘图的示例
2014/04/27 Python
简单介绍Python中的try和finally和with方法
2015/05/05 Python
Python 移动光标位置的方法
2019/01/20 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
python实现人脸签到系统
2020/04/13 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
2020/07/05 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
巴西购物网站:Submarino
2020/01/19 全球购物
2014超市双十一活动策划方案
2014/09/29 职场文书
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript
Python实现猜拳与猜数字游戏的方法详解
2022/04/06 Python