php导入大量数据到mysql性能优化技巧

 更新时间:2014年12月29日 08:52:29   投稿:shichen2014  
这篇文章主要介绍了php导入大量数据到mysql性能优化技巧,通过针对SQL语句的优化实现了mysql性能的提高,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了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获取客户端IP及URL的方法示例

    php获取客户端IP及URL的方法示例

    这篇文章主要介绍了php获取客户端IP及URL的方法,涉及php预定义服务器变量$_SERVER相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • php+ajax实现无刷新分页的方法

    php+ajax实现无刷新分页的方法

    这篇文章主要介绍了php+ajax实现无刷新分页的方法,详细讲述了数据库的创建、Ajax文件的实现及PHP调用方法,需要的朋友可以参考下
    2014-11-11
  • php学习笔记之面向对象编程

    php学习笔记之面向对象编程

    一个php初学者的一个学习笔记的面向对象编程实例,有需要学习的朋友可参考下,脚本之家也更新了很多大家可以查阅下
    2012-12-12
  • php强大的时间转换函数strtotime

    php强大的时间转换函数strtotime

    在php中strtotime() 函数将任何英文文本的日期时间描述解析为 Unix 时间戳,这个函数也是我们经常会用到的,有需要的朋友参考一下
    2016-02-02
  • php代码出现错误分析详解

    php代码出现错误分析详解

    由于最近总是接触到php,经常会出现一些错误,特把php的常见的错误代码收集了下,希望对大家有帮助
    2008-06-06
  • php解决crontab定时任务不能写入文件问题的方法分析

    php解决crontab定时任务不能写入文件问题的方法分析

    这篇文章主要介绍了php解决crontab定时任务不能写入文件问题的方法,结合实例形式分析了crontab定时任务无法正常执行的原因与解决方法,需要的朋友可以参考下
    2019-09-09
  • PHP使用Curl实现模拟登录及抓取数据功能示例

    PHP使用Curl实现模拟登录及抓取数据功能示例

    这篇文章主要介绍了PHP使用Curl实现模拟登录及抓取数据功能,结合实例形式分析了php使用curl进行登陆、验证、cookie操作与数据抓取等相关实现技巧,需要的朋友可以参考下
    2018-04-04
  • PHP设计模式之简单工厂和工厂模式实例分析

    PHP设计模式之简单工厂和工厂模式实例分析

    这篇文章主要介绍了PHP设计模式之简单工厂和工厂模式,结合实例形式分析了php设计模式中工厂模式的实现方法及相关操作注意事项,需要的朋友可以参考下
    2019-03-03
  • 浅析关于PHP位运算的简单权限设计

    浅析关于PHP位运算的简单权限设计

    本篇文章是对PHP位运算的简单权限设计进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP如何通过表单直接提交大文件详解

    PHP如何通过表单直接提交大文件详解

    这篇文章主要给大家介绍了关于PHP如何通过表单直接提交大文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01

最新评论