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手册及PHP编程标准
Dec 17 PHP
快速配置PHPMyAdmin方法
Jun 05 PHP
PHP中$_SERVER的详细参数与说明
Jul 29 PHP
PHP5中使用DOM控制XML实现代码
May 07 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 PHP
php时区转换转换函数
Jan 07 PHP
php设计模式之命令模式使用示例
Mar 02 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 PHP
php cookie中点号(句号)自动转为下划线问题
Oct 21 PHP
PHP将进程作为守护进程的方法
Mar 19 PHP
PHP中的empty、isset、isnull的区别与使用实例
Mar 22 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/11/06 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
vue v-model的用法解析
2020/10/19 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
python实现的希尔排序算法实例
2015/07/01 Python
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
Python读写txt文本文件的操作方法全解析
2016/06/26 Python
Windows下python3.6.4安装教程
2018/07/31 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
python 读取修改pcap包的例子
2019/07/23 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
Python 列表的清空方式
2020/01/13 Python
Python 实现自动完成A4标签排版打印功能
2020/04/09 Python
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
土木工程毕业生自荐信
2013/09/21 职场文书
银行演讲稿范文
2014/01/03 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
旅游文化节策划方案
2014/06/06 职场文书
出国留学英文自荐信
2015/03/25 职场文书
海康机器人重磅发布全新算法开发平台VM4.2
2022/04/21 数码科技