本文实例讲述了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

{

$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

{

$tmpstr = "'". $array[$i] ."','". $str ."'";

$sql2 .= "(".$tmpstr."),";

}

$sql2 = substr($sql2,0,-1);   //去除最后的逗号

mysql_query($sql2);

这样,整个写入操作只有1次,大大地缩短了执行时间,差不多10秒就搞定了15000条记录,好了,本文到此结束,如果你也遇上写入大量数据到mysql耗时长的问题时,不如试试本文的优化方式.

希望本文所述对大家的php程序设计有所帮助。

mysql 优化配置 大批量数据插入_php导入大量数据到mysql性能优化技巧相关推荐

  1. matlab导入桌面excel数据库,matlab导入excel数据_excel怎么导入网络上的数据?_excel导入网络数据...

    网络上的数据怎么导到excel中.有方法是直接复制然后粘贴到excel中,但是网络上直接复制过来的,可能不能直接进去下一步编辑.因为复制过来的每个词后面都有空格,是不能进行直接计算,连最基本的求和都不 ...

  2. mysql 优化配置 大批量数据插入_[译] MySQL 最佳实践 —— 高效插入数据

    当你需要在 MySQL 数据库中批量插入数百万条数据时,你就会意识到,逐条发送 INSERT 语句并不是一个可行的方法. MySQL 文档中有些值得一读的 INSERT 优化技巧. 在这篇文章里,我将 ...

  3. mysql导入大量数据_mysql快速导入大量数据问题

    思路一: 今天需要把将近存有一千万条记录的*.sql导入到mysql中.使用navicate导入,在导入100万条之后速度就明显变慢了, 导入五百万条数据的时候用了14个小时,且后面的数据导入的越来越 ...

  4. mysql批量导入 导出数据_MySQL批量导入导出数据

    批量向mysql插入(文本)数据的方法有以下3种: 方法1. 可以先将要插入的数据统一保存在 .sql 文件中,各个insert 语句直接用分号分开.之后执行命令: source .sql 文件即可. ...

  5. mysql导出数据代码_MySQL导入导出数据下令

    mysql导入导出数据命令 MySQL导出导入数据命令 博客分类: MySQL MySQL数据结构SQLDOS脚本. 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导 ...

  6. Java怎么实现几十万条数据插入(30万条数据插入MySQL仅需13秒)

    本文主要讲述通过MyBatis.JDBC等做大数据量数据插入的案例和结果. 30万条数据插入插入数据库验证 实体类.mapper和配置文件定义 User实体 mapper接口 mapper.xml文件 ...

  7. hibernate mysql longblob_使用hibernate 插入mysql blob 字段 最大能插入多大的数据

    mysql 大对象存取: 类型一般应该用mediumblod, blob只能存2的16次方个byte, mediumblod是24次方, 一般来说够用了.longblob是32次方有些大. MYSQL ...

  8. mysql数据库导出后乱码问题_MySQL导入导出数据出现乱码的解决办法

    在mysql导入导出数据时经常出现中文乱码的问题,大多是因类导入导出时编码设置不一致所引起的.本文介绍了不同平台下的编码转换方法,供大家参考. 在linux系统中默认的是utf8编码,而windows ...

  9. mysql 二进制查询_MySql如何插入和查询二进制数据_MySQL

    bitsCN.com MySql如何插入和查询二进制数据 mysql二进制 Mysql:bit类型的查询与插入 mysql有种字段类型是bit. 1.如何插入呢? 它的插入必须采用: 可以使用b'va ...

最新文章

  1. 如何去判断一个面试者的深度学习水平?
  2. SpringBoot请求日期参数异常(Failed-to-convert-value-of-type-'java-lang-String'-
  3. UWP 推荐 - 限时免费的RSS阅读器《RSS 追踪》登录 Windows 10
  4. python基本判断语句_python基础4 - 判断(if)语句
  5. JAVA SAX解析XML文档
  6. 51nod 1443 路径和树——最短路生成树
  7. Flex 学习随笔 --- 找学习资料+安装环境+工具
  8. linux系统装psp,如何在Linux中玩PSP游戏
  9. php empty 0问题,解析:php empty 和空字符串区别
  10. MQTT协议(四) 【PUBLISH】发布消息
  11. JDK1.8和JDK1.7的HashMap源码分析以及线程不安全问题
  12. 【论文笔记】Dynamic Convolution: Attention over Convolution Kernels
  13. NLP-准确率、精确率、召回率和F1值
  14. 无需Root 手机装电脑系统 虚拟机
  15. 前端python开发_【2020Python修炼记】前端开发之 前端工具和HTML
  16. 今日金融词汇---仓位,是什么?
  17. 艾伟也谈项目管理,项目经理要如何看待技术?
  18. Python绘制类激活图曲线(热力曲线)
  19. 解决安装Adobe Creative Cloud时无法连接服务器
  20. 百度云在线倍速观看(电脑版和手机(安卓版))

热门文章

  1. Message LongText(消息的详细长文本)
  2. SAP附件清单的调用
  3. SAP业务测评之库存预留
  4. 网易考拉没有了,网易严选还会远吗?
  5. C语言程序设计 练习1-13
  6. java中为什么要用json_Java中使用JSON
  7. mysql 重置root_MySQL 重置Mysql root用户账号密码
  8. js手机端时间区间_js 时间区间
  9. java commons.util_Java — CommonUtil
  10. 陕西师范大学计算机科学学院公寓楼,陕西师范大学计算机科学学院简介