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 相关文章推荐
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
php错误、异常处理机制(补充)
May 07 PHP
php标签云的实现代码
Oct 10 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
May 12 PHP
thinkPHP中分页用法实例分析
Dec 26 PHP
CI框架的安全性分析
May 18 PHP
php中关于长度计算容易混淆的问题分析
May 27 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
PHP连接及操作PostgreSQL数据库的方法详解
Jan 30 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
Mar 28 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 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获取发送给用户的header信息的方法
2015/03/16 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
2012/02/27 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
Javascript实现计算个人所得税
2015/05/10 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
2018/03/13 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
微信小程序实现留言板
2018/10/31 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
python中urllib.unquote乱码的原因与解决方法
2017/04/24 Python
Python使用functools实现注解同步方法
2018/02/06 Python
Python中装饰器学习总结
2018/02/10 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
如何用python免费看美剧
2020/08/11 Python
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
优秀的毕业生的自我评价
2013/12/12 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
三好学生个人总结
2015/02/15 职场文书
会议通知
2015/04/15 职场文书
党员证明模板
2015/06/19 职场文书
同学会演讲稿
2019/04/02 职场文书
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL